0

我正在使用一个 windows-api,它返回一个宽字符多字符串作为结果。结果与以下相同:

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

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

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

2 回答 2

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

于 2012-08-19T13:00:00.147 回答
0

您似乎已经知道原始wchar_t clonned数组的大小。所以创建另一个相同大小的数组并简单地使用std::copy

std::copy(original, original+size, clonned)
于 2012-08-19T12:54:40.577 回答