我的char数组如下:
TCHAR name[256] = L"abc";
我还有另一个wstring矢量,如下,
std::vector<std::wstring> nameList;
nameList.push_back(L"cde");
nameList.push_back(L"fgh");
我想将 nameList 矢量第一个元素分配给 name 数组,
有人可以帮我吗?
答案 0 :(得分:2)
您可以使用std::copy
; name
是一个有界的数组,但是它作为函数参数的用法会衰减到指向其第一个元素的指针,这满足了输出迭代器的要求。
因此您可以:
wchar_t name[256] = L"abc";
std::vector<std::wstring> nameList;
nameList.push_back(L"cde");
nameList.push_back(L"fgh");
std::copy(nameList.front().begin(), nameList.front().end(), name);
请注意:这不会在缓冲区中添加任何尾随\0
终止符;如果您想替换/覆盖name
,也应该只使用std::wstring
并为自己节省一些麻烦
答案 1 :(得分:1)
考虑到您的问题以及必须使用数组而不是wstring的假设,您最好的选择是使用ITEM_PIPELINES = {
'myproject.pipelines.RootImagesPipeline': 1000
}
甚至是老式的std::copy
。但是,由于以下两个原因,它们很危险:
也就是说,您可以使用以下命令安全地执行此操作:
memcpy
如果TCHAR不是wchar_t,您还可以添加if (nameList[0].size() >= 256) {
throw std::length_error("string too long");
}
std::copy(nameList[0].begin(), nameList[0].end(), name);
name[nameList[0].size()] = TCHAR(0);
来强制编译器错误,但是由于副本将逐字符进行隐式转换,因此可能没有必要。