gpt4 book ai didi

C新手: why swprintf fail for me?

转载 作者:太空宇宙 更新时间:2023-11-04 05:17:40 26 4
gpt4 key购买 nike

求助!我对 C 语言一无所知,但我必须对 C 代码做一点补充。

我从 GetLastError 得到一个错误号 (int) 并将它显示到一个表单中。相反,我需要获取实际的错误字符串。

我添加了对 FormatMessage 的调用。调用本身工作正常,但不打印字符串(使程序崩溃)。我做错了什么?

wchar_t *textbuf;

if(textbuf==NULL)
{
textbuf=(wchar_t *)malloc(4096);
memset(textbuf,0,4096);
}

wchar_t *lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, rc, // rc is an int, returned from another function, the result of GetLastError()
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPWSTR)lpMsgBuf, 0, NULL);
swprintf(textbuf, L"%s%s%s\n", textbuf, L"\t\t\t", lpMsgBuf);

最佳答案

您没有为 textbuf 分配任何内存。因此,请考虑使用任意大小的值,例如 wchar_t textbuf[50] 或使用 malloc 进行动态内存分配。

此外,在最后一行中,您使用 textbuf 作为第三个参数。这是没有意义的,因为它是空的(或有垃圾)并且将总是可能克服缓冲区大小。

关于C新手: why swprintf fail for me?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32157759/

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