인프런 커뮤니티 질문&답변

이재완님의 프로필 이미지
이재완

작성한 질문수

홍정모의 따라하며 배우는 C언어

11.4 문자열을 입력받는 다양한 방법들

fgets() 함수 질문

해결된 질문

작성

·

296

·

수정됨

2

안녕하세요.11-4 강의 듣고 궁금한 점이 있어 질문드립니다.


스크린샷 2023-11-02 151955.png 콘솔창에 문자를 입력할 때 eof 혹은 줄바꿈 말고 4글자를 입력하면 프로그램이 종료되는데, 이는 어떤 원리에서 종료되는 걸까요?

답변 1

2

안녕하세요, 답변 도우미 Soobak 입니다.

 

코드를 보면, small_array 는 크기가 5char 자료형의 배열로 선언되었습니다.
fgets() 함수는 지정된 문자 배열 크기만큼의 문자를 입력받습니다.
그러나 종료 문자('\0')를 포함해야 하므로 실제로 입력 받을 수 있는 문자의 수는 배열 크기보다 하나 작습니다.

 

따라서, 만약 "aaaa\n" (입력의 마지막에 Enter 키를 입력하면서 개행문자가 추가됩니다.) 과 같이 문자 4 개와 개행문자 '\n' , 총 5 글자를 입력하면,
fgets() 함수는 4 글자의 "aaaa" 만 읽어와 종료문자를 추가하여 small_array 에 저장하고, 나머지 개행문자('\n')는 버퍼에 남게 됩니다.

 

이 때, 그 다음 while() 반복문의 조건을 검사하면서 fgets() 함수는 버퍼에 남아 있는 개행문자('\n')를 읽어 small_array[0] 에 저장하게 됩니다.
따라서, small_array[0] != '\n' 반복문의 조건을 만족하지 못하여 종료됩니다.

 

이재완님의 프로필 이미지
이재완

작성한 질문수

질문하기