环境 vc2005 , 工程也是设置为 unicode用CStdioFile::ReadString() 读出一个unicode文件的一行,已经越过头两个字符了(0xff和0xfe),读到szBuff里面
szBuff[0]='T'
szBuff[1]='\0'
szBuff[2]='E'
szBuff[3]='\0'
...
看了内存,就是正常的啊,可是用AfxMessageBox输出的时候,却只输了第一个字符 T ,后面都没了。
AfxmessageBox没办法输出Unicode的字符串吗?

解决方案 »

  1.   

    那肯定只显示一个T,因为你的这行代码szBuff[1]='\0'已经标志字符串已经结束了。
      

  2.   

    afxmessageboxW
      

  3.   

    被‘\0’截断 这个其实我也知道
    可是
    TCHAR szTest[10]=__TEXT("TEST");
    AfxMessageBox(szTest);这样就可以输出完整的,这是怎么回事呢?
      

  4.   


    按照你的理解,这个和上面的相同之处是什么?这个是t,e,s,t,'\0'
    上个是t,'\0',e,'\0'
    所以,这个完整输出,上个,输出t.
      

  5.   

    CStdioFile::ReadString() 读进来,似乎把ansi文件的每个字符强转成unicode字符了
      

  6.   


    TCHAR szTest[10]=__TEXT("TEST"); 我本来以为是 'T', '\0', 'E', '\0', 'S', '\0', 'T', '\0'
    可是看了一下其实是 T,E,S,T,\0_TEXT 宏不是应该把它转成宽字符吗?
      

  7.   

    _T不是用来转换的当定义了UNICODE时, _T所指定的串为Unicode字符串
    否则,就是ANSI字符串。如果要转换,需要WideCharToMultiByte和MultiByteToWideChar
      

  8.   


    MessageBox(CString((LPWSTR)szBuff)));