我在代码中声明了字符串数组,如下所示。
char *arr[] ={
"xyz",
"abc",
"pqr",
NULL
};
编译时会收到以下警告
warning: deprecated conversion from string constant to 'char*''
我知道“xyz”和其他字符串文字都是const char而我的数组是char *所以通过声明我的数组const char * arr来解析它但我丢失了控制以将该数组指向另一个指针。 所以解决上面的问题已经声明了数组如下
char *arr[] ={
(char *)"xyz",
(char *)"abc",
(char *)"pqr",
NULL
};
但是当需要大数组(超过100个字符串数组)时,这种类型的声明不公平。 所以任何人都有想法以另一种方式解决它。
答案 0 :(得分:4)
通过使数组成为const char* arr[]
,您不会丢失任何重定向选项。请注意,const char * p
(指向不可变char
的可变指针)和char * const p
(指向可变char
的不可变指针)之间存在巨大差异。此代码完全有效:
const char *arr[] = {
"xyz",
"abc",
"pqr",
NULL
};
arr[1] = "ghi";
答案 1 :(得分:1)
如果您的指针是const char*
,char *const
和const char*
之间存在差异,您仍然可以将其指向其他位置,但无法修改其中包含的元素。在这种情况下,正确的解决方案是创建数组const char*
。
答案 2 :(得分:0)
字符串文字是常量,因此您需要const
指针来引用它们:
const char *arr[] = {
// whatever
};
从历史上看,过去可能(但很危险)将字符串文字转换为非常量char*
,以便与不了解const
的古代代码兼容。此转换已被弃用多年,最终于2011年从该语言中删除。