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

copy string function to non const char buffer

本文关键字:const 字符 缓冲区 字符串 函数 复制      更新时间:2023-10-16

我试图将字符串复制到缓冲区以供进一步处理。我使用了

指令
char *buf = line.c_str();

但是buf类型应该是const char*,然而如果我要使用

const char *buf = line.c_str();

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

一种方法是使用标准库容器,如std::vector或c++ 14的std::dynarray:

std::vector<char> v(line.begin(), line.end());

请记住,这复制了line的字符,没有null终止。在这种意义上,缓冲区不代表字符串。如果您需要null终止(从问题中不清楚),则必须手动添加:

v.push_back('');

则可以通过

使用底层数据
char* c1 = &v[0]
char* c2 = v.data(); // c++11

试试这个

char* buf = strdup(line.c_str());
// use strtok_s however you need
free(buf);

你不能直接使用缓冲区而不修改它,因为strtok_s实际上修改了数据。c_str希望你不要碰数据

如果您不关心修改,只需:

char* buf = &line[0];