警告:已弃用从字符串常量转换为'char *''

时间:2014-01-02 12:54:37

标签: c++ c

我在代码中声明了字符串数组,如下所示。

char *arr[] ={ 
"xyz",
"abc",
"pqr",
NULL
};

编译时会收到以下警告

warning: deprecated conversion from string constant to 'char*'' 

我知道“xyz”和其他字符串文字都是const char而我的数组是char *所以通过声明我的数组const char * arr来解析它但我丢失了控制以将该数组指向另一个指针。 所以解决上面的问题已经声明了数组如下

 char *arr[] ={ 
    (char *)"xyz",
    (char *)"abc",
    (char *)"pqr",
    NULL
    };

但是当需要大数组(超过100个字符串数组)时,这种类型的声明不公平。 所以任何人都有想法以另一种方式解决它。

3 个答案:

答案 0 :(得分:4)

通过使数组成为const char* arr[],您不会丢失任何重定向选项。请注意,const char * p(指向不可变char的可变指针)和char * const p(指向可变char的不可变指针)之间存在巨大差异。此代码完全有效:

const char *arr[] = {
  "xyz",
  "abc",
  "pqr",
  NULL
};

arr[1] = "ghi";

Live example

答案 1 :(得分:1)

如果您的指针是const char*char *constconst char*之间存在差异,您仍然可以将其指向其他位置,但无法修改其中包含的元素。在这种情况下,正确的解决方案是创建数组const char*

答案 2 :(得分:0)

字符串文字是常量,因此您需要const指针来引用它们:

const char *arr[] = {
    // whatever
};

从历史上看,过去可能(但很危险)将字符串文字转换为非常量char*,以便与不了解const的古代代码兼容。此转换已被弃用多年,最终于2011年从该语言中删除。