C在动态二维数组中存储字符串文字
我有动态分配内存以将字符串存储到char ***
(二维数组字符串或三维数组字符)的函数。C在动态二维数组中存储字符串文字
我后来认为,如果我将它们存储为字符串文字会更好,所以我将我的数组更改为const char ***
。但是,当我使用strcpy()
和free()
时,这给我错误。
error: passing argument 1 of 'strcpy' discards 'const' qualifier from pointer target type
我明白参数strcpy()
和free()
拿的都是类型char *
和void *
的,但我也看过,这是很好的做法,字符串存储到const char *
而不是char *
。
我如何使用字符串文字如果它不能用于像strcpy()
或free()
这样的操作?我是否应该将它作为char ***
而不是const char ***
?这里有一些显而易见的东西我不理解。
据我所知,你的数组不包含指向字符串文字的指针,而是包含字符串文字的副本。否则,strcpy用于什么?所以你可以从数组(或相应的指针)声明中删除const限定符。考虑到在C字符串文字中有非常量数组的类型。
如果我说我想使用'const char ***',我不应该使用'strcpy()',而是直接分配字符串?例如'const char * a =“foo”; const char * b = a'?并做一个免费的字符串文字('const char *')? – thestateofmay
@thestateofmay如果你想存储指向字符串的指针,那么你可以使用限定符const。字符串文字具有静态存储持续时间。 –
@thestateof可以只释放一个动态分配的对象。字符串文字不是动态分配的(这是由弗拉德的评论表达的,他们有静态存储时间,但我不确定你是否认识到这一点)。 –
“char ***”类型的对象和它指向的对象(如果有的话)都不是字符串的二维数组或是“char”的三维数组,它们本身是彼此不同的。更一般地说,数组和指针并不完全相同,多维数组是数组的数组,而不是指针数组。 –