我正在使用一个 windows-api,它返回一个宽字符多字符串作为结果。结果与以下相同:
L"apple\0banana\0orange\0\0"
是否有任何标准功能或良好的性能解决方案可以将此结构复制到缓冲区?
copy_wide_char_multi_string(dst, src); // dst and src are wchar_t arrays
我从不费心使用宽字符串,所以将其视为指南。
您可以实现如下算法:
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
您似乎已经知道原始wchar_t clonned
数组的大小。所以创建另一个相同大小的数组并简单地使用std::copy
std::copy(original, original+size, clonned)