C++ 将字符串函数复制到非常量字符缓冲区

C++ 将字符串函数复制到非常量字符缓冲区,c++,visual-studio,C++,Visual Studio,我正在尝试将字符串复制到缓冲区以进行进一步处理。我用了说明书 char *buf = line.c_str(); 但是buf类型应该是constchar*,但是如果我要使用 const char *buf = line.c_str(); 在使用strtok_s函数处理buf时,我将面临另一个问题。此函数应为char*arg。而不是const char*。 是否有其他功能或方法将此行复制到char*?试试这个 char* buf = strdup(line.c_str()); // use s

我正在尝试将字符串复制到缓冲区以进行进一步处理。我用了说明书

char *buf = line.c_str();
但是
buf
类型应该是
constchar*
,但是如果我要使用

const char *buf = line.c_str();
在使用
strtok_s
函数处理
buf
时,我将面临另一个问题。此函数应为
char*
arg。而不是
const char*
。 是否有其他功能或方法将此行复制到
char*

试试这个

char* buf = strdup(line.c_str());
// use strtok_s however you need
free(buf);
如果不修改缓冲区,就不能直接使用它,因为strtok_实际上修改了数据
c_str
希望您不要处理数据

如果您不关心修改,只需执行以下操作:

char* buf = &line[0];

一种方法是使用标准库容器,如或C++14:

然后,您可以通过

char* c1 = &v[0]
char* c2 = v.data(); // c++11

不允许直接对
.c_str()
的结果调用
strok
,因为
strok
修改其参数/缓冲区。要在其上使用strtok,必须先制作完整副本并使用它。
const char*buf=line.c_str()
不是副本,您只是获取字符串的地址。该字符串是不可变的,因为它属于从中获取它的std::string。您需要将其复制到某个可变的位置—您自己的char[]缓冲区或strdup缓冲区,或者需要使用std::string成员直接对字符串进行操作。(请记住,strtok实际上修改了
&行[0]
的源字符串)+1-1代表strdup(line.c_str())。最终得分为零。
v.push_back('\0');
char* c1 = &v[0]
char* c2 = v.data(); // c++11