Char * string []声明错误

时间:2013-02-10 16:53:22

标签: c pointers char

这个声明有什么问题?

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; ...}引出警告,而不是像这里处理初始化程序。我不认为这个问题应该作为该问题的副本而被关闭

1 个答案:

答案 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 ++程序,默认情况下会启用此警告。