正在将memcpy的使用转换为std::copy
Converting use of memcpy to std::copy
我有一段使用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
的正确用法。
相关文章:
- 将无符号char*转换为std::istream*C++
- 可以有效地转换 std::any 与 std::any_cast
- 尝试转换 std::chrono::d uration 会导致"rep cannot be a duration"编译错误
- 封送处理 - 转换 std::向量<char>到字符串^ 反之亦然
- 在 C++ 中转换 std::string,使其可以是 C# 中的 byte[]
- 转换 std::vector<T> 为 char *
- 转换std ::绑定到功能指针
- 强制转换 std::vector 的所有成员
- 无法转换'std::string{又名std::basic_string<char>}'到&
- 转换std::string到cv::Mat对象
- 转换std::chrono::system_clock::time_point::min()为字符串时,无效空指针错误
- 简单的模板化函数,用于转换 std::vectors - "illegal use of this type as an expression"
- Const转换std容器
- 如何强制转换std::make_unique,以便可以使用在类中声明的函数
- 如何向下转换std::shared_ptr
- 转换 std::vector<uint8_t> 为 QImage
- 使用std::dynamic_pointer_cast向上转换std::shared_ptr
- 如何转换std::vector<无符号字符>到向量<char>而无需复制
- 正在强制转换std::pair
const&T1 const, T2>const&安全的 - 如何在boost.python中转换std::string*