5

这个声明有什么问题?

char *add_element[] = {"1","S"};

编译时出现此错误-

warning: initialization discards qualifiers from pointer target type

我究竟做错了什么?

这个问题与为什么我得到不同;用“const char *”类型的表达式初始化“char *”会丢弃限定符吗?. 这可以通过下面写的评论来验证。谢谢你的回答。

可能的重复问题是相关的,但不相同。这是关于为什么 void func(const char *ptr) { char *local = ptr; ... } 引发警告,而不是像这里那样处理初始化程序。我认为这个问题不应该作为该问题的副本而关闭

4

1 回答 1

9

您似乎正在使用 GCC 并已-Write-strings打开。这使得编译器对这种情况发出警告。它将字符串文字变成const char数组而不是char数组,从而使您的初始化丢弃const. 采用:

const char *add_element[] = { "1", "S" };

或关闭-Wwrite-strings

从 GCC 手册:

-Wwrite-strings

编译 C 时,给字符串常量指定类型const char[length],以便将 1 的地址复制到非const char *指针中会收到警告。这些警告将帮助您在编译时找到可以尝试写入字符串常量的代码,但前提是您必须非常小心地const在声明和原型中使用。否则,只会造成麻烦。这就是我们没有-Wall提出这些警告的原因。

编译 C++ 时,警告从字符串文字到char *. C++ 程序默认启用此警告。

于 2013-02-10T16:54:07.843 回答