在初始化C字符串数组时,警告从字符串const转换为char *

时间:2013-02-15 13:57:57

标签: c arrays string initialization

我曾经在C:

中声明并初始化一个字符串数组
char *myTable[] = {
   "ABC",  "Y", "*",  "*",
   "WXYZ", "Y", "*",  "*",
   "MNO",  "Y", "*",  "*",
   NULL,   NULL,NULL, NULL
};

NULL是供内部使用的。

自从我转到gcc 4.4.6后,我收到了警告:

abc.cpp:74: warning: deprecated conversion from string constant to ‘char*’

初始化数组的正确方法是什么?

4 个答案:

答案 0 :(得分:4)

这是因为你试图放弃这些字符串文字的常量,并且编译器足够周到以警告你,因为试图修改存储这些常量字符串文字的内存会导致未定义的行为 [1]

将您的数组声明为const char *myTable[]


[1]: C99标准:6.7.8初始化§32

  

声明char *p = "abc";定义p类型为''char''的指针,并将其初始化为指向类型为''数组char''的对象长度为4,其元素用字符串文字初始化。 如果尝试使用p修改数组的内容,则行为未定义。

答案 1 :(得分:1)

尝试使用const char *而非char*

答案 2 :(得分:1)

这是因为字符串文字是常量,所以你必须使用const char *myTable[]

答案 3 :(得分:1)

一个看起来像“hello world”的字符串是一个不可变的字符串常量。你必须声明

const char *myTable[] = {
   "ABC",  "Y", "*",  "*",
   "WXYZ", "Y", "*",  "*",
   "MNO",  "Y", "*",  "*",
   NULL,   NULL,NULL, NULL
};