• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

fgets() 함수 질문

23.11.02 15:21 작성 23.11.02 15:23 수정 조회수 157

2

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


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

답변 1

답변을 작성해보세요.

2

Soobak님의 프로필

Soobak

2023.11.02

안녕하세요, 답변 도우미 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' 반복문의 조건을 만족하지 못하여 종료됩니다.