gpt4 book ai didi

c - wchar_t* 到 char* 转换中的 fatal error

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

这是将 wchar_t* 字符串转换为 char* 字符串的 C 代码:

wchar_t *myXML = L"<test/>";
size_t length;
char *charString;
size_t i;
length = wcslen(myXML);
charString = (char *)malloc(length);
wcstombs_s(&i, charString, length, myXML, length);

代码编译但在执行时它在最后一行检测到 fatal error 并停止运行。

现在,如果我用这一行替换最后一行:

wcstombs_s(&i, charString, length+1, myXML, length);

我刚刚将 +1 添加到第三个参数。然后它完美地工作......

为什么需要添加这个技巧?还是我的代码中其他地方存在缺陷?

最佳答案

'\0' 终止符需要一个额外的字节。 wcslen 返回的长度中不包括这个!

要正确执行此操作,您不仅需要将 length+1 传递给 wcstombs_s,还需要传递给 malloc:

charString = (char *)malloc(length+1);
wcstombs_s(&i, charString, length+1, myXML, length);

即便如此,我怀疑它也无法正常工作。并非所有宽字符都可以映射到单个 char,因此对于非 ASCII 字符,您需要在多字节字符串中使用额外的空间。

关于c - wchar_t* 到 char* 转换中的 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4967977/

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