有一个代码如下所示。我有问题,通过参数。
stringstream data;
char *addr=NULL;
strcpy(addr,retstring().c_str());
retstring()
是一个返回字符串的函数。
//more code
printfunc(num,addr,data.str().c_str());
我得到了错误
从"const char *"到"char *"转换无效。
正在初始化函数参数3上的"void Printfunc(int,char *,char *)"的参数3
在上面的行中。该函数的调用如下所示
void Printfunc(int a, char *loc, char *stream)
请让我知道如果我需要改变任何初始化.
4条答案
按热度按时间os8fio9y1#
data.str().c_str()
产生一个char const*
,但是你的函数Printfunc()
想要有char*
。基于名称,它不改变参数,而只是打印它们和/或使用它们来命名文件,在这种情况下,你可能应该把你的声明修改为替代方法可能是将
char const*
转换为char*
,但最好修复声明:0s7z1bwu2#
string::c.str()
返回const char *
类型的字符串,如here所示快速解决方案:试浇铸
printfunc(num,addr,(char *)data.str().c_str())
;虽然上述方法可行,但这是不确定的行为,而且不安全。
下面是一个使用模板的更好的解决方案:
x8diyxa73#
首先这个代码片段
是无效的,因为您没有分配要复制retstring().c_str()的内存。
至于错误信息,那么它是足够清楚的。表达式数据的类型。str().c_字符串()为const char *,但函数的第三个参数被声明为char *。不能将const char * 类型的对象赋给char * 类型的对象。函数应将第三个参数定义为const char * 如果它不更改第三个参数所指向的对象,或者您不能传递类型为const char * 的参数。
ppcbkaq54#
c_str()将为您提供一个常量字符 *
要将const char * 转换为char *,可以像这样使用strdup。
它也将生成一个新的malloc,因此它创建了一个副本。
所以你必须这么做