将字符串文字分配给char *

时间:2011-12-02 12:17:44

标签: c++ string pointers char literals

  

可能重复:
  How to get rid of deprecated conversion from string constant to ‘char*’ warnings in GCC?

这项任务:

char *pc1 = "test string";

给了我这个警告:

  

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

虽然这个似乎很好:

char *pc2 = (char*)("test string");

这是一个更好的方法吗?

注意:由于其他原因,我无法使用const char*

3 个答案:

答案 0 :(得分:7)

字符串文字是C ++中的const char[],可能存储在只读内存中,因此如果您尝试修改它,程序将崩溃。指向一个非常量指针是一个坏主意。

答案 1 :(得分:5)

这取决于您是否需要修改字符串文字。如果是的话,

char pc1[] = "test string";

答案 2 :(得分:5)

在第二个示例中,您必须确保不要尝试修改pc2指向的字符串。

如果您确实需要修改字符串,可以使用以下几种方法:

  1. 制作动态分配的文字副本(完成后不要忘记free()):

    char *pc3 = strdup("test string"); /* or malloc() + strcpy() */

  2. 使用数组而不是指针:

    char pc4[] = "test string";