C 在动态二维数组中存储字符串文字
C storing string literals inside dynamic 2D arrays
我有动态分配内存以将字符串存储到 char ***
(2D 字符串数组或 3D 字符数组)的函数。
后来我想如果我把它们存储为字符串文字会更好,所以我把我的数组改成了const char ***
。但是,当我使用 strcpy()
和 free()
.
时,这会给我带来错误
error: passing argument 1 of 'strcpy' discards 'const' qualifier from pointer target type
我知道参数 strcpy()
和 free()
take 的类型是 char *
和 void *
,但我也读到存储字符串变成 const char *
而不是 char *
。
如果字符串文字不能用于 strcpy()
或 free()
等操作,我该如何使用它?我应该将它保留为 char ***
而不是 const char ***
吗?这里有一些明显的东西我不明白。
据我了解,您的数组不包含指向字符串文字的指针,而是包含字符串文字的副本。否则 strcpy 有什么用?因此,您可以从数组(或相应的指针)声明中删除 const 限定符。考虑到在 C 中,字符串文字具有非常量数组的类型。
我有动态分配内存以将字符串存储到 char ***
(2D 字符串数组或 3D 字符数组)的函数。
后来我想如果我把它们存储为字符串文字会更好,所以我把我的数组改成了const char ***
。但是,当我使用 strcpy()
和 free()
.
error: passing argument 1 of 'strcpy' discards 'const' qualifier from pointer target type
我知道参数 strcpy()
和 free()
take 的类型是 char *
和 void *
,但我也读到存储字符串变成 const char *
而不是 char *
。
如果字符串文字不能用于 strcpy()
或 free()
等操作,我该如何使用它?我应该将它保留为 char ***
而不是 const char ***
吗?这里有一些明显的东西我不明白。
据我了解,您的数组不包含指向字符串文字的指针,而是包含字符串文字的副本。否则 strcpy 有什么用?因此,您可以从数组(或相应的指针)声明中删除 const 限定符。考虑到在 C 中,字符串文字具有非常量数组的类型。