none
UNICODE环境下,字符串使用的问题。 RRS feed

  • 问题

  • 首先感谢大家帮助!

         我使用的是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 排版编辑
    2011年7月15日 2:07

答案


  • 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
    2011年7月15日 2:20
    版主

全部回复


  • 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
    2011年7月15日 2:20
    版主
  • 谢谢你~程序通过了
    2011年7月15日 2:29