我正在尝试使用wchar_t
将char
转换为wcstombs
。如果只转换了1个值,它可以正常工作,但是当转换的值超过1时,它会产生意外结果。
这些是我要转换的两个wchar_t
值:
wchar_t szBuf[BUFF_LEN];
wchar_t szBuf1[BUFF_LEN];
并使用wcstombs
进行转换:
char user[]="";
int length = wcstombs(user,szBuf,250);
char pass[]="";
int length1 = wcstombs(pass,szBuf1,250);
如果我szBuf
中的 alice 和szBuf1
中的 alice123 ,那么pass
会给出正确的值user
1}}将具有类似 aalice123 的值。错误是什么?
答案 0 :(得分:3)
您正在调用未定义的行为,因为您在缓冲区边界之外编写。您的user
和pass
个缓冲区的长度均为1
(它们是由""
的副本初始化的数组)。所以你很高兴写入随机记忆,任何事情都可能发生。