char转换为CString的问题

char sRead[12];<br /> CFile mFile(_T(&quot;user.txt&quot;), CFile::modeRead);<br /> mFile.Read(sRead, sizeof(sRead));<br /> mFile.Close();<br /><br /> mancode = sRead;<br /> MessageBox(mancode);<br /> char sRead[12];<br /> CFile mFile(_T(&quot;user.txt&
我看了一下,应该是因为你从文件中读取到的123456是Unicode数据
unicode中 字符‘1’ 不是存的 一个字节 而是一个字节的 48 再加上一个字节的 0
这样的话,你的MessageBox在遇到 0的时候就以为字符串结束了,所以就只输出了1,而不是123456

我看你的程序写了 _T("") ,你的程序应该是unicode项目,你应该不用char 改用TCHAR 追问

弹出了这个,这又是问什么啊?谢谢了

追答
少了字符串结束标记
这个CString是MFC库里面的类么?
如果是的话,有如下3种方法
方法1:
char a[] = "This is a test";
CString str = a;
方法2:
CString str(a);
方法3:
CString str;
str.Format(_T("%s"), a);
Cstring是一个封装好了的类,封装时必须考虑兼容问题,所以Cstring 等价于LPCTSTR,这里C表示常量不是很重要,重要的是T这是个宏,如果定义了统一码(unicode),宏T也表示宽字符(W表示宽字符),即一个字符占2字节。这种情况下 T(“xxx”)等价于L"xxx"的;这样一来 如果没定义unicode CString = LPCTSTR =const char*;如果定义了unicode CString=LPCTSTR=LPCWSTR= const w_char*(都是宽字符);如果指针之间等价是可以强制转换的(这里是说指针,不包括Cstring 这是个类),
但是指针转Cstring 可以借助Cstring的构造函数,Cstring有6个构造函数其中就有char转Cstring的,CString( LPCSTR lpsz ); 所以mancode=CString(sRead);。 追问

但是按照你这个修改的话就变成了这样,这又是为什么啊?谢谢

追答
文本一般是unicode码,从你乱码情况看更能确定文本是unicode,那么你得用WCHAR sRead[max] 数组去读,
CString( LPCWSTR lpsz );即mancode=CString(sRead);
还有你应该打断点调试看看变量的值 ,用消息框弹出来就太……
追问

这个是打过断点的截图,我是想比较cin和mancode是否相等判断密码正确性,但是明明这两个变量相等却无法进入,并弹出密码错误

http://zhidao.baidu.com/question/1445799809378601100.html