我使用了一个返回宽字符多字符串的windows-api作为结果。结果如下:
L"apple\0banana\0orange\0\0"
是否有任何标准功能或良好的性能解决方案将此结构复制到缓冲区?
copy_wide_char_multi_string(dst, src); // dst and src are wchar_t arrays
答案 0 :(得分:2)
我从不打扰使用宽字符串,所以请考虑这个指南。
您可以实施如下算法:
wchar_t * wide_string = L"something\0something else\0herp\0derp\0\0";
int size = 0;
int i = wcslen(wide_string + size); // length of wide string
size += i + 1; // length of wide string inc. null terminator
while (true)
{
int i = wcslen(wide_string + size); // length of wide string
size += i + 1; // length of wide string inc. null terminator
if (i == 0) break; // if length was 0 (2 nulls in a row) break
}
++size; // count final null as part of size
这将为您提供缓冲区中数据的大小。一旦你有了它就可以使用wmemcpy
答案 1 :(得分:0)
您似乎已经知道原始数组的大小。因此,创建另一个大小相同的wchar_t clonned
数组,只需使用std::copy
std::copy(original, original+size, clonned)