繁体   English   中英

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

[英]Why do I get a compiler warning for converting a string literal to a char*, is it bad?

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

 char* myString = "i like declaring strings like this";

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

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

是的,你应该担心它!

您应该将其声明为:

const char* myString = "i like declaring strings like this";

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

因此,C ++ 03 Standard不使用关键字const声明字符串文字,这确保了不能通过指针修改字符串文字。


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

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

它甚至不应该编译。 如果你需要将它传递给你确定不会改变你需要使用const cast的字符串的函数,它的一个正确的用途:

functionName(const_cast<char *>("something"));

或者,如果您不想进行const转换,则可以将字符串复制到堆栈中:

char str[] = "something";
functionName(str);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM