如何修复警告已弃用的从字符串常量到 'char*' 的转换C++?
How can I fix warning deprecated conversion from string constant to 'char*' in C++?
代码为:
char *prefix(node)::name() const
{
return str(prefix(node));
}
消息是deprecated conversion from string constant to ‘char*’
我怎么解决它?
您得到此警告的原因是您返回的指针指向全局数据,这些数据可能被保护为只读,也可能不被保护为只读,因此对它的任何更改都会崩溃或反映在每个后续调用中。
如果你认为这不是问题,因为你不打算修改它,返回一个const char*
代替。如果您想要返回一个局部可修改的字符串(在此字符串上的更改不会在随后对该方法的调用中反映出来),则返回std::string
或strdup
字符串(但不要忘记自己将其free
)。如果你想返回一个全局可修改的字符串(这个字符串的变化将反映在对这个方法的后续调用中),返回一个指向全局数组的指针,而不是一个直接的字符串常量:
char *prefix(node)::name() const
{
static char string[] = str(prefix(node));
return string;
}
这里假设str
是一个返回字符串常量的宏。
后一种解决方案实现了无警告的现状状态。