我正在尝试将字符串复制到缓冲区以进行进一步处理。我用了指令
char *buf = line.c_str();
但buf
类型应为const char*
,但如果我要使用
const char *buf = line.c_str();
我将面临另一个问题,因为我正在使用strtok_s
函数来处理buf
。这个函数期待char *
arg。而不是const char*
。
是否有另一种功能或方法将此行复制到char *
??
答案 0 :(得分:1)
试试这个。
char* buf = strdup(line.c_str());
// use strtok_s however you need
free(buf);
您无法直接使用缓冲区而不进行修改,因为strtok_s实际上会修改数据。 c_str
希望您单独保留数据。
如果您不关心修改,请执行以下操作:
char* buf = &line[0];
答案 1 :(得分:1)
一种方法是使用标准库容器,例如std::vector
或C ++ 14 std::dynarray
:
std::vector<char> v(line.begin(), line.end());
请记住,这会复制line
的字符而不会出现空终止\0
。从这个意义上讲,缓冲区不代表字符串。如果您需要空终止(问题中不清楚),您必须手动添加它:
v.push_back('\0');
然后您可以通过
使用基础数据char* c1 = &v[0]
char* c2 = v.data(); // c++11