将字符串文字分配给char*

Pie*_*o M 13 c++ string pointers char literals

可能重复:
如何摆脱deprecated conversion from string constant to ‘char*’海湾合作委员会的警告?

这项任务:

char *pc1 = "test string";
Run Code Online (Sandbox Code Playgroud)

给了我这个警告:

警告:不推荐将字符串常量转换为'char*'

虽然这个似乎很好:

char *pc2 = (char*)("test string");
Run Code Online (Sandbox Code Playgroud)

这是一个真正更好的方法吗?

注意:由于其他原因我不能使用const char*.

Wyz*_*a-- 8

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

  • 无论它是否存储在只读存储器中,都可以通过UB对其进行修改.故事结局. (5认同)

Mah*_*esh 5

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

char pc1[] = "test string";
Run Code Online (Sandbox Code Playgroud)

  • 这不会让您修改文字,而是让您修改副本 (2认同)

NPE*_*NPE 5

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

如果确实需要修改字符串,则有几种选择:

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

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

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

    char pc4[] = "test string";