为什么我会收到编译器警告,将字符串文字转换为char*,这是不是很糟糕?

wfb*_*ale 3 c++ c-strings string-literals

所以编译器告诉我这是一个从字符串文字到char*的不推荐的转换:

 char* myString = "i like declaring strings like this";
Run Code Online (Sandbox Code Playgroud)

我应该担心吗?这是错误的方法吗?

我需要传递myString给一个接受a的函数,char*我应该在char*没有这个转换的情况下正确地初始化它?

Alo*_*ave 9

是的,你应该担心它!

您应该将其声明为:

const char* myString = "i like declaring strings like this";
Run Code Online (Sandbox Code Playgroud)

mystring是指向字符串文字的指针"i like declaring strings like this",字符串文字驻留在一个内存空间(实现定义)中,程序不应该修改它.
修改字符串文字会导致未定义的行为.

因此,不推荐使用C++ 03 Standard声明不带关键字的字符串文字const,这样可以确保不能通过指针修改字符串文字.


回答你的问题编辑,已由@Benjamin在评论中发布,只是引用他的回答:

使用数组:
char myString [] ="我喜欢声明这样的字符串";
将文字复制到数组中,可以修改副本

  • @weezybizzle:使用数组: - `char myString [] ="我喜欢声明这样的字符串";` - 将文字复制到数组中,并且可以修改副本. (4认同)