gpt4 book ai didi

c++ - wchar* 和打印它的问题 C

转载 作者:行者123 更新时间:2023-11-30 19:10:38 30 4
gpt4 key购买 nike

我有一个问题,有时在字符串末尾我会得到很多?????????我不知道如何解决这个问题,而不是得到那些垃圾。 。 .

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?

非常感谢!

最佳答案

您的做法是正确的:

    WCHAR* buf = (WCHAR*)d.GetData();
buf[length + 1] = L'\0';

细微差别在于,当您获得指向数据的指针(无需复制)时,您仍在对 d 中的缓冲区进行操作。当d超出范围时,它会被销毁(可能与数据一起被销毁),因此您可能会得到任何垃圾。

这就是 wcsncpy 可以帮助将数据复制到您单独控制的另一个缓冲区中,添加终止零并将其传递给 AddElement。如果您不小心存储了指向将要被销毁的数据的指针,请务必仔细检查。

关于c++ - wchar* 和打印它的问题 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41036234/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com