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

时间:2014-04-22 20:14:13

标签: c++ stl

我有一些使用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 :: vector,函数“getTitle()”返回“title”的第i个元素中的字符串.otitle是一个长字符数组,我希望能够复制“title”的每个元素“进入otitle(见memcpy)。

1 个答案:

答案 0 :(得分:2)

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

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

如果带有memcpy的原始版本处理复制空终止符(无法从您的代码段中说明),则您需要手动处理。这里还有其他细节可能有问题,因为我不知道您的代码应该做什么的具体细节,但这至少可以正确使用std::copy