2012-04-09 3 views
1

저는 C++ 연습 문제를 다룰 예정입니다. 앞으로의 테스트를 준비하기 위해 전에는 보지 못했던 for 루프 조건을 고민하고 있습니다.for 루프의 조건은 언제 false가됩니까?

 for (int i = 0; s[i]; i++) 

주에서 전송 된 문자열 s"Two roofs to fix"

문제 (가) 루프의 조건에 대해 거짓이 될 것입니다 무엇입니까?

+4

힌트 : 문자열 "fix to two roofs"는 문자열 끝에 null 종결자가 있습니다. null-terminator가'for' 루프의 두 번째 표현식에서 평가하는 것은 무엇이라고 생각합니까? –

+1

그래서 당신이 말한 것은 정확한 것 이상으로 갈 수 없기 때문에 멈추어야하는 문자열 뒤에 무엇입니까? – Ali

+1

@Ali : 문자열 끝에 null 종결 자'\ 0'이 있으면 false 값으로 변환되는 0 값이 있습니다. –

답변

5

문자열의 끝이 0 인 '\0'에 도달하면 루프 조건이 거짓이됩니다. (if (0)이 거짓으로 평가 됨)

참고 :이 테스트 형식은 문자열이 null로 끝나지 않을 때까지 기다릴 수있는 오류 일 수 있습니다.

+2

-1 : '\ 0'으로 문자열이 끝났다는 것을 알았다면, 나는 그 질문을하지 않았을 것이라고 확신합니다. –

+7

정답으로 -1을주고 싶습니까? –

+1

아니요, * 불완전한 경우 *. –

2

@ MitchWheat의 답변을 명확히하기 위해 조건으로 사용되는 표현식이 if (x)과 같은 값만 지정하면 if (x != 0)과 같습니다. 값이 포인터 유형이라면 대신 if (x != NULL)과 같습니다 (NULL == 0부터 실제로는 "대신"이 아니지만).

1
#include<iostream> 
#include<string> 

using namespace std; 

int main() 
{ 
    string s = "Two roofs to fix"; 
    int i; 
    for (i = 0; s[i]; i++); 
    cout<<"i = "<<i<<endl; 
} 

위의 코드로 문제를 테스트합니다. "문자열 첨자가 범위를 벗어났습니다"라는 오류를 반환합니다. 따라서 문자열 s의 길이가 Len 인 경우 [Len]은 불법입니다. 코드에서 s는 포인터 char *가 아니며 문자열입니다. 따라서 이렇게 코딩하는 것은 부적절합니다.

+1

그는 문자열을 말했지만'std :: string' 또는'char *'에 대해서는 명확하지 않았습니다. 그는 오류를 언급하지 않았으므로'char * s '라고 가정합니다. – loganfsmyth