错误:从“常量字符*”到“字符*”的转换无效
error: invalid conversion from ‘const char*’ to ‘char*’
可能的重复项:
将 strtok 与 std::string 一起使用
#include<iostream>
#include <string>
#include <string.h>
using namespace std;
int main()
{
string s("hello hi here whola");
string background;
char *strval;
char* tok = strtok_r(s.c_str()," ",&strval);
while(tok !=NULL)
{
cout << tok <<"n";
if (tok == "&")
background = tok;
else
{
statements1;
statement2.. ;
}
tok = strtok_r(NULL, " ",&strval);
}
return 0;
}
输出:
new.cpp: In function ‘int main()’:
new.cpp:13:47: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
/usr/include/string.h:359:14: error: initializing argument 1 of ‘char* strtok_r(char*, const char*, char**)’ [-fpermissive]
s.c_str()
返回指向常量字符的指针,以防止您修改备份内存。您需要使用strdup()
函数制作此常量字符串的可写副本,因为它确实strtok()
修改了您正在扫描令牌的字符串。
strtok
修改其参数。string.c_str()
不允许这样做,因为它是一个常量字符*
此外,即使它有效,您的if( tok == "&" )
也不起作用,因为 tok 是 char*,而不是字符串,因此您将进行指针而不是内容比较。
您需要使用strcmp()
既然你使用的是字符串,为什么不去破产并使用其他 c++ 结构呢?
stringstream ss(s);
string tmp;
while (ss >> buf) {
if( buf == "&" ) background = buf; // one wonders why
cout << buf << 'n';
}
您的代码将 C++ string
s 和 cout
s 与 C strtok_r
函数混合在一起。这不是一个好的组合。
错误的直接原因是c_str()
返回一个const char *
,而strtok()
要求一个非常量char *
。它想要修改您作为参数传递的字符串,并且不允许你修改c_str()
返回的字符串。
如果要执行此 C 样式,请将s
切换到 char[]
。
char s[] = "hello hi here whola";
int background = 0;
char *strval;
char* tok = strtok_r(s, " ", &strval);
while (tok != NULL)
{
printf("%sn", tok);
if (strcmp(tok, "&") == 0)
background = 1;
else
{
statement1;
statement2;
...
}
tok = strtok_r(NULL, " ", &strval);
}
相关文章:
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- 成本字符*类型的非常量引用的无效初始化,并且来自常量字符*类型的临时引用
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 构建 NFIQ2 时从"字符"到"字符*"的转换无效
- 跨平台套接字发送,Linux 上的缓冲区常量无效* Windows上的常量字符*,最佳处理方式
- 二进制表达式的操作数无效("常量字符*"和"常量字符*")
- 答案审查 - 从"常量字符*"到"字符"的转换无效
- 从字符到康斯特* 字符的转换无效,代码有什么问题?
- 如何替换/忽略 C stdio.h getline() 中的无效 Unicode/UTF8 字符
- 如何使用ISTream对象输入多个字符到对象的数组中?(and 0作为哨兵值.下面的我的代码将无效)
- CIN是否将输入流中的无效字符取用
- 从字符 * 到 int 的转换无效
- 如何将常量无效*转换为无符号字符*
- 简短的:从字符到常量字符*的转换无效
- 用户输入逻辑运算符符号或数字,如果输入字符或字符串则无效
- 从"常量字符*"到"字符*"[-允许]的转换无效;VTK-7.1.1 编译错误
- 指针与无效字符合法的比较
- 字符和常量字符[2] 类型的操作数无效到二进制运算符
- 读取文本文件会导致缓冲区末尾的字符无效
- 转换常量无符号字符无效