我曾经在C:
中声明并初始化一个字符串数组char *myTable[] = {
"ABC", "Y", "*", "*",
"WXYZ", "Y", "*", "*",
"MNO", "Y", "*", "*",
NULL, NULL,NULL, NULL
};
NULL是供内部使用的。
自从我转到gcc 4.4.6后,我收到了警告:
abc.cpp:74: warning: deprecated conversion from string constant to ‘char*’
初始化数组的正确方法是什么?
答案 0 :(得分:4)
这是因为你试图放弃这些字符串文字的常量,并且编译器足够周到以警告你,因为试图修改存储这些常量字符串文字的内存会导致未定义的行为强> [1]
将您的数组声明为const char *myTable[]
[1]: C99标准:6.7.8初始化§32:
声明
char *p = "abc";
定义p
类型为''char
''的指针,并将其初始化为指向类型为''数组char
''的对象长度为4,其元素用字符串文字初始化。 如果尝试使用p
修改数组的内容,则行为未定义。
答案 1 :(得分:1)
尝试使用const char *
而非char*
。
答案 2 :(得分:1)
这是因为字符串文字是常量,所以你必须使用const char *myTable[]
。
答案 3 :(得分:1)
一个看起来像“hello world”的字符串是一个不可变的字符串常量。你必须声明
const char *myTable[] = {
"ABC", "Y", "*", "*",
"WXYZ", "Y", "*", "*",
"MNO", "Y", "*", "*",
NULL, NULL,NULL, NULL
};