关于ASCI字符串与Unicode字符串的奇怪问题,很不解,请高手指点.
问题一:
void test0()
{
char str[] = "你好呀,这是一个测试";
FILE* pf = fopen("C:\\test.t","w");
fwrite(str,sizeof(char),strlen(str)+1,pf);
fclose(pf);
}
void test1()
{
wchar_t wstr[] = L"你好呀,这是一个测试";
FILE* pf = fopen("C:\\test.t","w");
fwrite(wstr,sizeof(wchar_t),wcslen(wstr)+1,pf);
fclose(pf);
}
调用test0时,写入的文件test.t大小为20字节,记事本打开,字符串正常.
调用test1时,写入的文件test.t大小为22字节,记事本打开,字符串乱码.
疑问:1.为什么test0时,我明明fwrite进去的是sizeof(char)*((strlen)+1) = 11字节,为什么却是20,就算系统自动将其转换为Unicode,加上'\0'应该是sizeof(wchar_t)*((strlen)+1) = 22呀?
2.为什么test1会乱码?大小是22字节,而不是跟test0一样的20字节?
问题二:
ASCI字符串与Unicode字符串的转换问题.
void test2()
{
char cstr[] = "你好呀";
wchar_t wstr[16];
MByteToWChar(cstr,wstr,strlen(cstr)); //在这设断点看到wstr是"你好呀",正常,但下面printf却乱码
// MByteToWChar将ASCI转换为Unicode的,函数应该没问题
wprintf(wstr);
}
test2中,如果将中文改为英文或数字,printf就正常了.这个我倒知道.