这个声明有什么问题?
char *add_element[] = {"1","S"};
编译时出现此错误 -
warning: initialization discards qualifiers from pointer target type
我做错了什么?
这个问题与Why I get; initializing 'char *' with an expression of type 'const char *' discards qualifiers?不同。这可以通过下面的评论来验证。谢谢你回答。
可能重复的问题是相关的,但不一样。这是为什么void func(const char * ptr){char * local = ptr; ...}引出警告,而不是像这里处理初始化程序。我不认为这个问题应该作为该问题的副本而被关闭
答案 0 :(得分:9)
您似乎正在使用GCC并已启用-Write-strings
。这使得编译器正好警告这种情况。它使字符串文字成为const char
数组而不是char
数组,使您的初始化放弃const
。使用:
const char *add_element[] = { "1", "S" };
或关闭-Wwrite-strings
。
从GCC手册:
<强>
-Wwrite-strings
强>编译C时,为字符串常量提供
const char[length]
类型 将一个地址复制到非const
char *
指针中会得到一个 警告。这些警告将帮助您找到可以尝试的编译时代码 写入一个字符串常量,但只有你一直非常小心 在声明和原型中使用const
。否则,它只会是一个 滋扰。这就是为什么我们没有让-Wall
请求这些警告。编译C ++时,警告字符串文字的弃用转换 到
char *
。对于C ++程序,默认情况下会启用此警告。