这个宣言有什么问题?
char *add_element[] = {"1","S"};
Run Code Online (Sandbox Code Playgroud)
编译时我得到这个错误 -
warning: initialization discards qualifiers from pointer target type
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
这个问题与我为什么不同; 使用'const char*'类型的表达式初始化'char*'会丢弃限定符?.这可以通过下面的评论来验证.谢谢你的回答.
可能重复的问题是相关的,但不一样.这是为什么void func(const char*ptr){char*local = ptr; ...}引出警告,而不是像这里处理初始化程序.我不认为这个问题应该作为该问题的副本而结束
您似乎正在使用GCC并已-Write-strings打开.这使得编译器正好警告这种情况.它使字符串文字成为const char数组而不是char数组,使你的初始化丢弃const.使用:
const char *add_element[] = { "1", "S" };
Run Code Online (Sandbox Code Playgroud)
或者关掉-Wwrite-strings.
从GCC手册:
-Wwrite-strings在编译C时,为字符串常量提供类型,
const char[length]以便将一个地址复制到非constchar *指针中时会收到警告.这些警告将帮助您在编译时找到可以尝试写入字符串常量的代码,但前提是您const在声明和原型中使用时非常小心.否则,这只会令人讨厌.这就是为什么我们没有-Wall提出这些警告的要求.编译C++时,请注意从字符串文字转换为不推荐的转换
char *.对于C++程序,默认情况下会启用此警告.