Большинство текстов в стандартной библиотеке C ++ упоминают wstring как эквивалент строки, за исключением параметризации на wchar_t вместо char, а затем переходят к демонстрации только строки.
Ну, иногда есть некоторые специфические причуды, и вот один: мне кажется, я не могу назначить wstring из массива 16-битных символов с NULL-завершением. Проблема заключается в том, что в задании успешно используется нулевой символ, и любой мусор следует за реальными символами. Вот очень небольшое сокращение:
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?
Спасибо