从'const char*'到'char*'的无效转换

use*_*234 36 c++

有一个代码如下所示.我有问题传递参数.

stringstream data;
char *addr=NULL;
strcpy(addr,retstring().c_str());
Run Code Online (Sandbox Code Playgroud)

retstring() 是一个返回字符串的函数.

//more code
printfunc(num,addr,data.str().c_str());
Run Code Online (Sandbox Code Playgroud)

我收到了错误

从'const char*'到'char*'的无效转换.

在函数的参数3上初始化'void Printfunc(int,char*,char*)'的参数3

在上面这一行.该函数调用如下所示

void Printfunc(int a, char *loc, char *stream)
Run Code Online (Sandbox Code Playgroud)

如果我需要更改任何初始化,请告诉我.

Die*_*ühl 45

好吧,data.str().c_str()产生一个,char const*但你的功能Printfunc()想要char*s.根据名称,它不会更改参数,只是打印它们和/或使用它们来命名文件,在这种情况下,你应该修改你的声明是

void Printfunc(int a, char const* loc, char const* stream)
Run Code Online (Sandbox Code Playgroud)

替代方案可能是将其char const*转变为a char*但修复声明更可取:

Printfunc(num, addr, const_cast<char*>(data.str().c_str()));
Run Code Online (Sandbox Code Playgroud)


Lou*_*s93 15

string::c.str()返回类型的字符串const char *所看到这里

快速修复:尝试铸造printfunc(num,addr,(char *)data.str().c_str());

虽然上述可能有效,但它是未定义的行为,并且不安全.

这是使用模板的更好的解决方案:

char * my_argument = const_cast<char*> ( ...c_str() );
Run Code Online (Sandbox Code Playgroud)

  • 第一个问题是使用强制转换去除constness.第二个问题是使用C样式转换. (3认同)
  • 模板一工作正常。它可能是最安全的解决方案! (2认同)