C++ 标准库中的大多数文本都提到 wstring 等同于 string,除了在 wchar_t 上参数化而不是 char,然后继续仅演示 string。
嗯,有时,有一些特定的怪癖,这里有一个:我似乎无法从一个 NULL 终止的 16 位字符数组中分配一个 wstring。问题是赋值愉快地使用空字符和任何垃圾作为实际字符。这是一个非常小的减少:
typedef unsigned short PA_Unichar;
PA_Unichar arr[256];
fill(arr); // sets to 52 00 4b 00 44 00 61 00 74 00 61 00 00 00 7a 00 7a 00 7a 00
// now arr contains "RKData\0zzz" in its 10 first values
wstring ws;
ws.assign((const wchar_t *)arr);
int l = ws.length();
此时 l 不是预期的 6(“RKData”中的字符数),而是大得多。在我的测试运行中,它是 29。为什么是 29?不知道。内存转储不显示第 29 个字符的任何特定值。
所以问题是:这是我的标准 C++ 库(Mac OS X Snow Leopard)中的错误,还是我的代码中的错误?我应该如何将一个以空字符结尾的 16 位字符数组分配给 wstring?
谢谢