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

    return true; 
} 

上述函数不断触发断点。它有什么问题?检查CString是否全部小写

+0

“断点”在哪里触发,它说什么/它给你什么信息? – MicroVirus

+0

第56行isctype.c – user3396028

+0

表达式:(无符号)(c + 1)<= 256 – user3396028

回答

1

最可能的原因是CString是宽字符,因为你有统一定义为默认字符集:所有TCHAR旨意是wchar_t,广式,在Visual Studio是2个字节。

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

您应该使用tchar.h方法与CString工作,在这种情况下_istlower这是isloweriswlower_ismbclowerTCHAR变种。哪一个取决于所选的字符集,但重要的是总是使用与CString相同的集合。

详细说明这一点:tchar.h定义了标准库中(大部分)字符串函数的别名,根据字符集自动选择正确的变体。因此,无论何时您发现自己使用的方法都适用于C字符串,并且您想要将它与CStringTCHAR阵列,LPTCHAR等一起使用,您需要为其找到相应的tchar.h别名并使用它。