저는 C++ 연습 문제를 다룰 예정입니다. 앞으로의 테스트를 준비하기 위해 전에는 보지 못했던 for 루프 조건을 고민하고 있습니다.for 루프의 조건은 언제 false가됩니까?
for (int i = 0; s[i]; i++)
주에서 전송 된 문자열 s
는 "Two roofs to fix"
문제 (가) 루프의 조건에 대해 거짓이 될 것입니다 무엇입니까?
저는 C++ 연습 문제를 다룰 예정입니다. 앞으로의 테스트를 준비하기 위해 전에는 보지 못했던 for 루프 조건을 고민하고 있습니다.for 루프의 조건은 언제 false가됩니까?
for (int i = 0; s[i]; i++)
주에서 전송 된 문자열 s
는 "Two roofs to fix"
문제 (가) 루프의 조건에 대해 거짓이 될 것입니다 무엇입니까?
문자열의 끝이 0 인 '\0'
에 도달하면 루프 조건이 거짓이됩니다. (if (0)
이 거짓으로 평가 됨)
참고 :이 테스트 형식은 문자열이 null로 끝나지 않을 때까지 기다릴 수있는 오류 일 수 있습니다.
-1 : '\ 0'으로 문자열이 끝났다는 것을 알았다면, 나는 그 질문을하지 않았을 것이라고 확신합니다. –
정답으로 -1을주고 싶습니까? –
아니요, * 불완전한 경우 *. –
@ MitchWheat의 답변을 명확히하기 위해 조건으로 사용되는 표현식이 if (x)
과 같은 값만 지정하면 if (x != 0)
과 같습니다. 값이 포인터 유형이라면 대신 if (x != NULL)
과 같습니다 (NULL == 0부터 실제로는 "대신"이 아니지만).
#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 *가 아니며 문자열입니다. 따라서 이렇게 코딩하는 것은 부적절합니다.
그는 문자열을 말했지만'std :: string' 또는'char *'에 대해서는 명확하지 않았습니다. 그는 오류를 언급하지 않았으므로'char * s '라고 가정합니다. – loganfsmyth
힌트 : 문자열 "fix to two roofs"는 문자열 끝에 null 종결자가 있습니다. null-terminator가'for' 루프의 두 번째 표현식에서 평가하는 것은 무엇이라고 생각합니까? –
그래서 당신이 말한 것은 정확한 것 이상으로 갈 수 없기 때문에 멈추어야하는 문자열 뒤에 무엇입니까? – Ali
@Ali : 문자열 끝에 null 종결 자'\ 0'이 있으면 false 값으로 변환되는 0 값이 있습니다. –