将多字符串复制到缓冲区中

时间:2012-08-19 12:17:25

标签: c++ c widechar

我使用了一个返回宽字符多字符串的windows-api作为结果。结果如下:

L"apple\0banana\0orange\0\0"

是否有任何标准功能或良好的性能解决方案将此结构复制到缓冲区?

copy_wide_char_multi_string(dst, src); // dst and src are wchar_t arrays

2 个答案:

答案 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)