有一个代码如下所示.我有问题传递参数.
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)