Проблемы с wchar* и печатью его C
У меня проблема, иногда в конце строки я получаю много????????? Я не знаю, как это исправить, чтобы не получить этот мусор.,,
USHORT length = (USHORT)d.GetLength();
if (length == 0) {
cEncodeJsonUtil->AddElement(dataHeader, L"null", false);
}
else {
WCHAR* buf = (WCHAR*)d.GetData();
//buf[length + 1] = L'\0'; //bugs like this as well as like buf[length]=L'\0';
// should I escape here or not ? is this + L'\0' ok ?S?!? Even after excaping still there is trash inside.
cEncodeJsonUtil->AddElement(dataHeader, (const WCHAR*)buf+ L'\0');
}
cEncodeJson->AddElement
просто распечатывает элемент, как это
wprintf(L"\n\"%s\" : \"%s\"\n", pwszKey, pwszValue);
Я делаю что-то неправильно? Печатается неправильно? Должен ли я использовать:
swprintf(buf, L"%ls", buff); //to copy from the value I get to my own buffer?
Большое спасибо!
1 ответ
Вы были на правильном пути с этим:
WCHAR* buf = (WCHAR*)d.GetData();
buf[length + 1] = L'\0';
Нюанс в том, что когда вы получаете указатель на данные (без копирования), вы все равно работаете с буфером в d
, когда d
выходит из области видимости, он уничтожается (предположительно с данными), так что вы можете также получить любой мусор.
Вот где wcsncpy
может помочь скопировать данные в другой буфер, которым вы управляете отдельно, добавить конечный ноль и передать его в AddElement. И всегда тщательно проверяйте, не случайно ли вы храните указатель на данные, которые будут уничтожены.