我有一段使用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
按值返回字符串,因此当您调用它两次时,会得到两个不同的字符串。不过,您需要确保在同一字符串上调用begin
和end
。因此,您可以将结果存储在另一个字符串变量中。
std::string str = getTitle(i);
std::copy(str.begin(), str.end(), otitle + sizeof(int) + i*80);
如果使用memcpy的原始版本通过null终止符处理复制(无法从代码片段中判断),则需要手动处理。这里还有其他细节可能是错误的,因为我不知道代码应该做什么的确切细节,但这至少提供了std::copy
的正确用法。