bool CSubliminalDlg::CheckIfWordIsUppercase(CString w)
{
for(int i = 0; i < w.GetLength(); i++)
{
if(islower(w.GetAt(i)))
return false;
}
return true;
}
上述函数会一直触发断点。这有什么问题?
答案 0 :(得分:1)
最可能的原因是CString
是宽字符,因为您已将Unicode定义为默认字符集:所有TCHAR
将为wchar_t
,这是一种广泛的类型Visual Studio是2个字节。
相反,islower
是一个适用于char
的函数,一个1字节的数量。您点击的断点是islower
,验证输入实际上是在一个字符(或EOF
)的范围内。
您应该使用tchar.h
方法来处理CString
,在这种情况下_istlower
TCHAR
变体islower
,iswlower
或_ismbclower
。它取决于所选择的字符集,但重要的是始终使用与CString
相同的集合。
详细说明一下:tchar.h
为标准库中的(大多数)字符串函数定义别名,根据字符集自动选择正确的变体。因此,每当您发现自己使用的方法适用于C字符串,并且您希望将其用于CString
或TCHAR
数组,LPTCHAR
等时,您就会想要找到相应的tchar.h
别名并使用它。