环境 vc2005 , 工程也是设置为 unicode用CStdioFile::ReadString() 读出一个unicode文件的一行,已经越过头两个字符了(0xff和0xfe),读到szBuff里面
szBuff[0]='T'
szBuff[1]='\0'
szBuff[2]='E'
szBuff[3]='\0'
...
看了内存,就是正常的啊,可是用AfxMessageBox输出的时候,却只输了第一个字符 T ,后面都没了。
AfxmessageBox没办法输出Unicode的字符串吗?
szBuff[0]='T'
szBuff[1]='\0'
szBuff[2]='E'
szBuff[3]='\0'
...
看了内存,就是正常的啊,可是用AfxMessageBox输出的时候,却只输了第一个字符 T ,后面都没了。
AfxmessageBox没办法输出Unicode的字符串吗?
可是
TCHAR szTest[10]=__TEXT("TEST");
AfxMessageBox(szTest);这样就可以输出完整的,这是怎么回事呢?
按照你的理解,这个和上面的相同之处是什么?这个是t,e,s,t,'\0'
上个是t,'\0',e,'\0'
所以,这个完整输出,上个,输出t.
TCHAR szTest[10]=__TEXT("TEST"); 我本来以为是 'T', '\0', 'E', '\0', 'S', '\0', 'T', '\0'
可是看了一下其实是 T,E,S,T,\0_TEXT 宏不是应该把它转成宽字符吗?
否则,就是ANSI字符串。如果要转换,需要WideCharToMultiByte和MultiByteToWideChar
MessageBox(CString((LPWSTR)szBuff)));