错误:从'const char*'到'char*'的无效转换

Kan*_*nha 1 c++

可能重复:
使用带有std :: string的strtok

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

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]
Run Code Online (Sandbox Code Playgroud)

Ser*_*rge 8

将s.c_str()返回一个指针为const char以防止您修改备份存储.您需要使用strdup()函数创建此常量字符串的可写副本,因为它strtok()实际上会修改您正在扫描令牌的字符串.