2013-02-10 61 views
3

这个声明有什么问题?Char * string []声明错误

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

通常情况下,通过在Stack Overflow中搜索错误消息可以获得很好的答案。 – dasblinkenlight 2013-02-10 16:56:49

+1

@dasblinkenlight我打算打印你的评论,并把它放在一个金色的框架中。 – 2013-02-10 16:57:40

+3

可能的重复问题是相关的,但不一样。这是关于为什么'void func(const char * ptr){char * local = ptr; ...}引发警告,而不是像这里那样处理初始化程序。我不认为这个问题应该作为这个问题的重复来解决。 – 2013-02-10 17:01:46

回答

7

您似乎在使用GCC并且已打开-Write-strings。这使编译器警告这种情况。它使字符串文字变为const char数组而不是char数组,使您的初始化放弃const。使用方法:

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

或关闭-Wwrite-strings

从GCC手册:

-Wwrite-strings

当编译C,给字符串常量的类型const char[length]使得 复制一个的地址转换成非constchar *指针将得到一个 警告。这些警告将帮助您在编译时查找可尝试 以写入字符串常量的代码,但前提是您在声明和原型中使用const时一直非常小心 。否则,这只会​​是一个令人讨厌的问题。这就是为什么我们没有让-Wall请求这些警告。

编译C++时,警告有关从字符串文字 到char *弃用的转换。 C++程序默认启用此警告。

+0

有人在这里告诉我,由于历史原因,字符串文字是'char []'。怎么办? – 2013-02-10 16:54:40

+0

如何正确声明'add_element'? – 2013-02-10 16:54:41

+0

@JanDvorak'const char * add_element []'。 – 2013-02-10 16:54:56