将wchar_t转换为字符

Conversion of wchar_t into char

本文关键字:字符 转换 wchar      更新时间:2023-10-16

我正在尝试使用 wcstombswchar_t转换为char。如果只转换 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会有一个像 aalice123 这样的值。错误是什么?

您正在调用未定义的行为,因为您在缓冲区边界之外写入。user缓冲区和pass缓冲区的长度均为1(它们是由 "" 的副本初始化的数组(。所以你很高兴地写到随机记忆中,任何事情都可能发生。

目标缓冲区太小。

char user[] = "";等于char user[1] = "";。这意味着您将写入未分配的空间,这是未定义的行为。这是非常糟糕的,因为无法保证会发生什么。

指定去离子缓冲液的大小:char user[250] = "";