45.8 심사문제 질문입니다.
, 마 현준님이 작성#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char s1[1001];
int count = 0;
scanf("%[^/n]s", s1);
char* ptr = strtok(s1, " .,");
while (ptr != NULL)
{
if (ptr != NULL && strcmp(ptr, "the") == 0)
{
count++;
}
ptr = strtok(NULL, " .,");
}
printf("%d", count);
return 0;
}
코드가 이건데 디버깅 했을때 the 다음 grow에서 끊기고 바로 NULL값으로 가서 출력값이 1이 나오네요
어떻게 고쳐야 할까요
Re: 45.8 심사문제 질문입니다.
, 도장_ 관리자님이 작성심사문제 해설을 보면 알겠지만, 어떤 문자열이 입력될지 알 수 없기 때문에 strtok 호출 후에 NULL이 아닌지 확인하는 부분이 필요합니다.
여기서 주의할 점이 있는데 strtok 함수에서 반환된 잘린 문자열의 포인터 ptr은 NULL일 수도 있으므로 ptr이 NULL이 아닐 때만 strcmp 함수로 비교해야 합니다. 만약 strcmp 함수에 NULL이 들어가면 에러가 발생합니다.
strtok를 처음 호출한 이후의 결과가 NULL이 아닌 경우에만 while 루프를 반복하면서 한 단어씩 비교를 해야 하는데, while 루프 안에서 NULL 여부를 검사한다면 로직이 꼬여서 제대로 동작하지 않습니다.
UNIT 6을 참조해서 디버거 사용법을 익히세요. 코드 작성이 끝나면 F11로 한 단계씩 실행하면서 변수 값의 변화를 살펴보세요.