我的程序声明了一个字符串数组,就像这样:
char *colors[4] = {"red", "orange", "yellow", "blue"};
但是我得到了上面的编译器警告。虽然它可以编译,但如果有非弃用方法的话,我宁愿使用它。我尝试找出它的含义,但似乎无法弄清楚。我听说在'char'之前使用'const'可以解决问题,但如果有人能解释一下错误的含义会很有帮助。谢谢。
我的程序声明了一个字符串数组,就像这样:
char *colors[4] = {"red", "orange", "yellow", "blue"};
但是我得到了上面的编译器警告。虽然它可以编译,但如果有非弃用方法的话,我宁愿使用它。我尝试找出它的含义,但似乎无法弄清楚。我听说在'char'之前使用'const'可以解决问题,但如果有人能解释一下错误的含义会很有帮助。谢谢。
const char *colors[4] = {"red", "orange", "yellow", "blue"};
如果您曾经想在运行时编辑这些值,那么您应该先复制这些字符串。
"red", "orange", "yellow", "blue"
这些是常量字符串。创建一个非const指向常量字符串的指针是错误的,因此会产生警告。目前您收到了一条警告,但它应该是一个错误,因为在C++03中已弃用,在C++11中被禁止使用。
这些答案都是正确的。
请注意,如果您有一个需要作为参数的字符数组的函数,并且您像这样传递此参数:
foo ("bar");
void foo (char[] str) { printf(str); }
const char param[] = "bar";
foo (param);
2) 考虑使用C++标准字符串,如下所示:
void foo (std::string theParam) { std::cout << theParam; }
foo ("bar");
QString
也可以胜任,Gettext也是如此。void foo (char[] str) { printf(str); }
缺少 const,应该是 void foo (const char[] str) { printf(str); }
。前者会抛出一个 candidate function not viable: 1st argument ('const char *') would lose const qualifier
错误。 - Aldo Utrera从 'const char*' 到 'char*' 的转换无效
。 - Codes with Hammer
char const *colors[4]
,我的理解是一个由四个常量指针组成的数组。 - James Aylettconst char colors[4]
,而是const char *colors[4]
。这是一个指向常量数据的4个指针数组。 - HolyBlackCatan array of four constant pointers
应该是char * const colors[4]
。char const *colors[4]
是一种奇怪但有效的描述四个指向常量数据的指针数组的方式。 - HolyBlackCat