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