从"常量字符*"到"字符*"的转换无效
invalid conversion from 'const char*' to 'char*'
有一个如下所示的代码。我在传递参数时遇到问题。
stringstream data;
char *addr=NULL;
strcpy(addr,retstring().c_str());
retstring()
是一个返回字符串的函数。
//more code
printfunc(num,addr,data.str().c_str());
我收到错误
从"常量字符*"到"字符*"的转换无效。
初始化函数的参数 3 上的参数 'void Printfunc(int, char*, char*)'
在上面的一行。调用该函数如下所示
void Printfunc(int a, char *loc, char *stream)
如果我需要更改任何初始化,请告诉我。
好吧,data.str().c_str()
会产生一个char const*
但你的函数Printfunc()
想要char*
s。 根据名称,它不会更改参数,而只是打印它们和/或使用它们来命名文件,在这种情况下,您可能应该将声明修复为
void Printfunc(int a, char const* loc, char const* stream)
另一种方法是将char const*
变成char*
但最好修复声明:
Printfunc(num, addr, const_cast<char*>(data.str().c_str()));
string::c.str()
返回一个类型 const char *
的字符串,如下所示
快速修复:尝试铸造printfunc(num,addr,(char *)data.str().c_str())
;
虽然上述方法可能有效,但它是未定义的行为,并且不安全。
这是使用模板的更好解决方案:
char * my_argument = const_cast<char*> ( ...c_str() );
<</div>
div class="answers"> 首先是这个代码片段
char *addr=NULL;
strcpy(addr,retstring().c_str());
无效,因为您没有在要复制 retstring().c_str() 的位置分配内存。
至于错误消息,那就很清楚了。表达式 data.str().c_str() 的类型是 const char *,但函数的第三个参数声明为 char *。不能将 const char * 类型的对象分配给 char * 类型的对象。如果函数不更改第三个参数指向的对象,则应将第三个参数定义为 const char *,或者您不能传递 const char * 类型的参数。
c_str() 会给你一个常量字符 *
要将 const char * 转换为 char *,您可以像这样使用 strdup。
char * success = strdup(data.str().c_str());
此外,它还将创建一个新的 malloc,因此它会创建一个副本。
所以你需要这样做
char * success = strdup(data.str().c_str());
printfunc(num, addr, success);
free(success);
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 字符转换功能 std::isupper() & std::islower() C++17
- 将字符 * 转换为字符串 *
- 在编译时将常量字符* 转换为常量 char_type*
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 无法使用字符串流将字符转换为字符串C++
- 将无符号字符 C++ 转换为 C#
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 无法<string>从"常量字符 []"转换为<类名>
- 不能将字符转换为整数吗?
- 编译时将字符*转换为字节
- CP1251:从字符* 转换为 wchar_t* 时的编码失真
- 将单个字符转换为 std::string 前缀 \x01
- PPM 将字符转换为 int 授予负数
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类
- 将常量字符* 转换为字符时出错