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

How can I fix warning deprecated conversion from string constant to 'char*' in C++?

本文关键字:char C++ 转换 常量 警告 何修复 字符串      更新时间:2023-10-16

代码为:

char *prefix(node)::name() const 
{ 
   return str(prefix(node)); 
}

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

我怎么解决它?

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

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

char *prefix(node)::name() const 
{
    static char string[] = str(prefix(node));
    return string;
}

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

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