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

    return true; 
} 

위의 함수는 중단 점을 계속 트리거합니다. 그게 뭐가 잘못 되었 니? 모든 TCHARwchar_t, 비주얼 스튜디오에서 2 바이트입니다 다양한 유형이 될 것입니다 : 당신은 유니 코드를 기본 문자 집합으로 정의해야하기 때문에CString이 모두 소문자인지 확인하십시오.

+0

어디에서 '중단 점'이 발생했으며, 무엇이 그/당신에게 어떤 정보를 전하는가? – MicroVirus

+0

Line 56 isctype.c – user3396028

+0

표현식 : (부호없는) (c + 1) <= 256 – user3396028

답변

1

원인은, 와이드 문자 인 CString입니다.

반대로, islower은 1 바이트 수량 인 char에서 작동하는 함수입니다. 입력 한 breakpoint가 실질적으로 문자 범위 (또는 EOF)인지 확인하는 islower입니다.

당신은 islower, iswlower 또는 _ismbclowerTCHAR 변형이 경우 _istlower에, CString 작업을위한 tchar.h 방법을 사용한다. 어떤 문자가 선택된 문자 집합에 따라 다르지만 중요한 점은 항상 CString과 같은 집합을 사용한다는 것입니다.

tchar.h은 표준 라이브러리의 (대부분의) 문자열 함수에 대한 별칭을 정의하고 문자 집합에 따라 올바른 변형을 자동으로 선택합니다. 따라서 C 문자열에서 작동하는 메서드를 사용하고 CString 또는 TCHAR 배열, LPTCHAR 등과 같이 사용하려는 경우 해당 tchar.h 별칭을 찾아 사용하는 것이 좋습니다.

관련 문제