积极答复者
UNICODE环境下,字符串使用的问题。

问题
-
首先感谢大家帮助!
我使用的是VS2010,在MFC里添加一个EDIT控件并添加了一个CEdit的控制变量,我希望能读取其中的字符存储到char buff[50]变量中,然后和我从其他地方读取到的一个char password[7]进行strcmp比较。
但是在使用时,当我使用.SetWindowTextW()进行读取的时候读到的是宽字符变量,而且当我使用(LPTSTR)对BUFF强行转换的时候显示的出来的字符是乱码。 我想应该是因为UNICODE环境下,各种类型在转换的时候出了问题。
char password[7];//这个是在头文件的定义的一个public变量
void CICPositionMachineView::OnBnClickedButtonCheckpassword()
{
char buff[50] = {0};
m_PassWord.SetWindowTextW((LPTSTR)buff,50);
if(strlen(buff) == 0)
{
AfxMessageBox(_T("你没有输入密码!"));
return ;
}
if(strlen(buff)>6)
{
AfxMessageBox(_T("密码只有6位"));
return ;
}
if(!strcmp(password,buff))
{ m_bPwdIsRight=TRUE; AfxMessageBox(_T("密码正确!"); }
else
{ m_bPwdIsRight=FALSE; AfxMessageBox(_T("密码错误")); }
}我想过几个办法,将控件变为CString变量或者使用wcstombs()函数进行转化,可能是因为我在编写上的错误,编辑虽然成功,但是运行时,会跳出错误。
望能不吝赐教,谢谢!
- 已编辑 Gavin_Xu 2011年7月15日 2:11 排版编辑
答案
-
m_PassWord.SetWindowTextW((LPTSTR)buff,50);
-->
GetDlgItemTextA(GetSafeHwnd(), IDC_EDIT1, buff, sizeof(buff)/sizeof(buff[0]));
Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.- 已标记为答案 Gavin_Xu 2011年7月15日 2:28
全部回复
-
m_PassWord.SetWindowTextW((LPTSTR)buff,50);
-->
GetDlgItemTextA(GetSafeHwnd(), IDC_EDIT1, buff, sizeof(buff)/sizeof(buff[0]));
Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.- 已标记为答案 Gavin_Xu 2011年7月15日 2:28