2014-07-05 35 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別名並使用它。