3

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

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

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

我需要传递myString给一个接受 a 的函数,如果没有此转换char*,我应该正确初始化谁?char*

4

2 回答 2

9

是的,你应该担心它!

您应该将其声明为:

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

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

因此,C++03 标准不推荐在没有关键字的情况下声明字符串文字const,这确保了字符串文字不能通过指针修改。


@Benjamin 已经在评论中发布了对您的问题编辑的回答,只是引用了他的回答:

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

于 2011-10-23T17:32:52.290 回答
3

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

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

或者,如果您不想要 const 强制转换,您可以将字符串复制到堆栈:

char str[] = "something";
functionName(str);
于 2011-10-23T17:51:51.893 回答