wchar* 和打印它的问题 C
Problems with wchar* and printing it 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'[=10=]'; //bugs like this as well as like buf[length]=L'[=10=]';
// should I escape here or not ? is this + L'[=10=]' ok ?S?!? Even after excaping still there is trash inside.
cEncodeJsonUtil->AddElement(dataHeader, (const WCHAR*)buf+ L'[=10=]');
}
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?
非常感谢!
你在这方面走在了正确的轨道上:
WCHAR* buf = (WCHAR*)d.GetData();
buf[length + 1] = L'[=10=]';
细微差别在于,当您获得指向数据的指针(无需复制)时,您仍在对 d
中的缓冲区进行操作。当 d
超出范围时,它会被销毁(可能与数据一起),因此您也可能会得到任何垃圾。
这就是 wcsncpy
可以帮助将数据复制到您单独控制的另一个缓冲区的地方,添加终止零并将其传递给 AddElement。并始终仔细检查,如果您不小心存储了指向将要被销毁的数据的指针。
我有一个问题,有时在字符串的末尾我会得到很多 ??????????我不知道如何解决这个问题,而不是得到那些垃圾。 . .
USHORT length = (USHORT)d.GetLength();
if (length == 0) {
cEncodeJsonUtil->AddElement(dataHeader, L"null", false);
}
else {
WCHAR* buf = (WCHAR*)d.GetData();
//buf[length + 1] = L'[=10=]'; //bugs like this as well as like buf[length]=L'[=10=]';
// should I escape here or not ? is this + L'[=10=]' ok ?S?!? Even after excaping still there is trash inside.
cEncodeJsonUtil->AddElement(dataHeader, (const WCHAR*)buf+ L'[=10=]');
}
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?
非常感谢!
你在这方面走在了正确的轨道上:
WCHAR* buf = (WCHAR*)d.GetData();
buf[length + 1] = L'[=10=]';
细微差别在于,当您获得指向数据的指针(无需复制)时,您仍在对 d
中的缓冲区进行操作。当 d
超出范围时,它会被销毁(可能与数据一起),因此您也可能会得到任何垃圾。
这就是 wcsncpy
可以帮助将数据复制到您单独控制的另一个缓冲区的地方,添加终止零并将其传递给 AddElement。并始终仔细检查,如果您不小心存储了指向将要被销毁的数据的指针。