将字符串函数复制到非const char缓冲区

时间:2013-06-02 03:55:03

标签: c++ visual-studio

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

char *buf = line.c_str();

buf类型应为const char*,但如果我要使用

const char *buf = line.c_str();

我将面临另一个问题,因为我正在使用strtok_s函数来处理buf。这个函数期待char * arg。而不是const char*。 是否有另一种功能或方法将此行复制到char * ??

2 个答案:

答案 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