sizeof (arr)은 항상 1000001입니다. 문자열의 길이는 strlen으로 구해야 합니다.
공백은 arr[0]에 들어가고, arr[1]부터는 모두 널 문자가 들어있겠죠. 그러면 i = 1일 때 if문의 조건을 만족해서 arr의 끝까지 while문을 돌 뿐만 아니라, arr의 범위를 넘어서까지도 계속 돕니다. 사실 이 이후의 동작은 예측할 수 없죠. 다만 1로 출력되고 끝이 났다면 아직 런타임 에러가 나지 않을 수준에서 운 좋게 값이 공백 문자에 해당되는 메모리 값을 하나 발견해서 반복문을 탈출했다는 이야기고, 운이 나쁘면 끝내 런타임 에러가 나죠.
count++; 아래에 cout << i << '\n'; 을 한 번 넣어보시면 이해하시기 쉽습니다.
댓글을 작성하려면 로그인해야 합니다.
hoonaa1005 6년 전
#include <iostream>
#include <string>
#include <cstring>
#pragma warning(disable : 4996)
using namespace std;
int main(void)
{
freopen("input.txt", "r", stdin);
char arr[1000001] = { };
cin.getline(arr, 1000001, '\n');
int count = 0;
for (int i = 0;i < sizeof(arr); i++)
{
if (arr[i] != ' ')
{
while (arr[i] != ' ')
i++;
count++;
}
}
cout << count << '\n';
return 0;
}
여기서 input에 공백을 넣어도 count가 1이 출력이 되요ㅠㅠ왜그럴까요?