0

我曾经执行以下操作来声明和初始化 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

4 回答 4

4

这是因为您正在尝试删除这些字符串文字的常量性,并且编译器足够体贴地警告您,因为尝试修改存储这些常量字符串文字的内存会导致未定义的行为[1]

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


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

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

于 2013-02-15T14:01:18.277 回答
1

尝试使用const char *而不仅仅是char*.

于 2013-02-15T13:58:46.540 回答
1

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

于 2013-02-15T13:59:37.367 回答
1

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

const char *myTable[] = {
   "ABC",  "Y", "*",  "*",
   "WXYZ", "Y", "*",  "*",
   "MNO",  "Y", "*",  "*",
   NULL,   NULL,NULL, NULL
}; 
于 2013-02-15T14:02:12.983 回答