Note fgets( ) 함수의 작동 방식
fgets() 함수는 파일에 저장된 내용을 문자열 단위로 읽습니다. 이때 파일에 있는 줄바꿈 문자도 문자열에 포함합니다. 그리고 한 번 읽을 때 줄 단위로 읽는 것이 아니라 한 번에 읽을 수 있는 문자열의 길이만큼 읽습니다. 이것이 두 번째 전달값인 문자열의 최대 크기입니다. 앞의 코드에서는 MAX로 설정했으므로 MAX 크기만큼 읽어 옵니다.
그런데 6.4.1 배열에 문자열 저장하기에서 문자열은 끝을 나타내기 위해 마지막에 널 문자를 포함해야 한다고 했었죠? 그래서 fgets() 함수를 사용할 때 줄바꿈 문자를 읽으면 읽기를 중단합니다. MAX 크기를 초과하는 문자열이 입력되면 MAX - 1까지의 문자열만 입력받고, 마지막에 널을 추가해 현재까지 읽은 문자열을 저장합니다.
앞의 코드에서 while 문을 처음 반복하면 test1.txt 파일의 첫 번째 줄에서 줄바꿈 문자까지 읽어 line 배열에 저장합니다. 두 번째로 반복할 때는 test1.txt 파일의 두 번째 줄에서 줄바꿈 문자까지 읽어 line 배열에 저장합니다. 세 번째로 반복하면 읽을 문자열은 없고 널 문자만 추가되므로 비교할 값이 NULL이 되어 반복을 종료합니다.
그림 10-4 fgets( ) 함수의 작동 방식