2013-02-15 56 views
0

我用来做以下声明和用C初始化字符串的数组:警告从字符串常量转换为char *在初始化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

这是因为你试图放弃这些字符串的常量,并且编译器足够贴心,因为试图修改存储这些常量字符串文本的内存导致了未定义的行为 [1 ]

声明你阵列const char *myTable[]


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

声明char *p = "abc";定义p类型“‘指针char’”,并初始化其与长度为4,其元素具有字符串文字被初始化为指向一个对象类型“'的char阵列”。 如果尝试使用p修改数组的内容,则行为是未定义的。

+0

确实,我应该知道...... – Barth 2013-02-15 14:05:37

1

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

1

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

1

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

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