gpt4 book ai didi

c++ - 将 memcpy 的使用转换为 std::copy

转载 作者:行者123 更新时间:2023-11-28 02:50:15 26 4
gpt4 key购买 nike

我有一些使用 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)。

最佳答案

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

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

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

关于c++ - 将 memcpy 的使用转换为 std::copy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23229290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com