如何在C++中修复从字符串常量到'char*'的警告已弃用转换?

Ewy*_*ybe 0 c++ compiler-errors char

代码是:

char *prefix(node)::name() const 
{ 
   return str(prefix(node)); 
}
Run Code Online (Sandbox Code Playgroud)

信息是 deprecated conversion from string constant to ‘char*’

我该如何解决?

zne*_*eak 5

您收到此警告的原因是您返回的指针指向可能或可能不受保护为只读的全局数据,因此对它的任何更改都将崩溃或反映在每个后续调用中.

如果您认为这不是问题,因为您不打算修改它,请返回const char*.如果要返回一个可本地修改的字符串(在后续调用此方法时不会反映更改的字符串),请返回一个std::stringstrdup字符串(但不要忘记free自己).如果要返回一个全局可修改的字符串(更改将在后续对此方法的调用中反映出来的字符串),则返回指向全局数组而不是直接字符串常量的指针:

char *prefix(node)::name() const 
{
    static char string[] = str(prefix(node));
    return string;
}
Run Code Online (Sandbox Code Playgroud)

这假设str是一个返回字符串常量的宏.

后一种解决方案实现了无警告状态.