![](/img/trans.png)
[英]Passing string literal to function taking 'char *' and getting a compiler warning
[英]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.