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 ***?这里有一些显而易见的东西我不理解。

+1

“char ***”类型的对象和它指向的对象(如果有的话)都不是字符串的二维数组或是“char”的三维数组,它们本身是彼此不同的。更一般地说,数组和指针并不完全相同,多维数组是数组的数组,而不是指针数组。 –

据我所知,你的数组不包含指向字符串文字的指针,而是包含字符串文字的副本。否则,strcpy用于什么?所以你可以从数组(或相应的指针)声明中删除const限定符。考虑到在C字符串文字中有非常量数组的类型。

+0

如果我说我想使用'const char ***',我不应该使用'strcpy()',而是直接分配字符串?例如'const char * a =“foo”; const char * b = a'?并做一个免费的字符串文字('const char *')? – thestateofmay

+0

@thestateofmay如果你想存储指向字符串的指针,那么你可以使用限定符const。字符串文字具有静态存储持续时间。 –

+0

@thestateof可以只释放一个动态分配的对象。字符串文字不是动态分配的(这是由弗拉德的评论表达的,他们有静态存储时间,但我不确定你是否认识到这一点)。 –