正在将memcpy的使用转换为std::copy

Converting use of memcpy to std::copy

本文关键字:转换 std copy memcpy      更新时间:2023-10-16

我有一段使用memcpy的代码,我正试图将其转换为使用std::copy。我被语法卡住了,但这是目前适用于memcpy 的代码

length=sizeof(int)+title.size()*80;
char *otitle=new char [length];
unsigned int *ntitle=reinterpret_cast<unsigned int *>(otitle);
*ntitle=title.size();
for (i=0; i< title.size(); i++){
  memcpy(otitle+sizeof(int)+i*80, getTitle(i).c_str(), 80);
  //std::copy(getTitle(i).begin(), getTitle(i).end() , otitle);
}
doSomething(otitle, length);
delete otitle;

被注释掉的行不正确,所以我希望得到任何帮助。从本质上讲,"title"是一个std::向量,函数"getTitle()"返回"title"的第I个元素中的字符串。otitle是一个长字符数组,我希望能够将"title"中的每个元素复制到otitle中(请参阅memcpy)。

由于getTitle按值返回字符串,因此当您调用它两次时,会得到两个不同的字符串。不过,您需要确保在同一字符串上调用beginend。因此,您可以将结果存储在另一个字符串变量中。

std::string str = getTitle(i);
std::copy(str.begin(), str.end(), otitle + sizeof(int) + i*80);

如果使用memcpy的原始版本通过null终止符处理复制(无法从代码片段中判断),则需要手动处理。这里还有其他细节可能是错误的,因为我不知道代码应该做什么的确切细节,但这至少提供了std::copy的正确用法。