检查CString是否全部小写

时间:2014-07-05 10:10:34

标签: visual-c++

bool CSubliminalDlg::CheckIfWordIsUppercase(CString w)
{
    for(int i = 0; i < w.GetLength(); i++)
    {
        if(islower(w.GetAt(i)))
           return false;
    }

    return true;
}

上述函数会一直触发断点。这有什么问题?

1 个答案:

答案 0 :(得分:1)

最可能的原因是CString是宽字符,因为您已将Unicode定义为默认字符集:所有TCHAR将为wchar_t,这是一种广泛的类型Visual Studio是2个字节。

相反,islower是一个适用于char的函数,一个1字节的数量。您点击的断点是islower,验证输入实际上是在一个字符(或EOF)的范围内。

您应该使用tchar.h方法来处理CString,在这种情况下_istlower TCHAR变体isloweriswlower_ismbclower。它取决于所选择的字符集,但重要的是始终使用与CString相同的集合。

详细说明一下:tchar.h为标准库中的(大多数)字符串函数定义别名,根据字符集自动选择正确的变体。因此,每当您发现自己使用的方法适用于C字符串,并且您希望将其用于CStringTCHAR数组,LPTCHAR等时,您就会想要找到相应的tchar.h别名并使用它。