• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

21:00 fgets()함수 EOF 관련 질문

22.02.13 17:15 작성 조회수 781

0

char small_array[5];

puts("Enter long strings:");

//fgets(small_array, 5, stdin); // FILE* _Stream

printf("%p\n", small_array);

printf("%p\n", fgets(small_array, 5, stdin));

// 만약 fgets()가 EOF를 만나면 NULL을 반환한다.

// 콘솔에 Ctrl + z를 입력하면 인위적으로 EOF를 입력할 수 있다.

fputs(small_array, stdout);

return 0;

에서 EOF만 입력했을 때는 NULL이 반환되지만 

문자열 + EOF 예를 들어 abc^Z를 입력했을 때는 NULL이 아닌 small_array의 주소값과 동일하게 출력됩니다.

EOF를 만나는 경우에 NULL이 반환된다고 하셨는데 문자열 + EOF의 경우가 이해가 되지 않아 질문합니다.

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2022.02.14

안녕하세요 :)

음.. 질문을 이해하기가 조금 어려운데,

문자열 + EOF의 경우 문자열까지 입력이 됩니다만, 보통 그렇게 입력하는 상황은 잘 없습니다.

혹시 문제가 발생하는 상황이나 

궁금한 점을 조금 더 명확히 말씀해주시면 더 자세한 답변이 가능할 듯 합니다 :)

감사합니다.

 

kskw20님의 프로필

kskw20

질문자

2022.02.14

강의에서 fgets()함수가 EOF를 "만나면" NULL을 반환한다고 하셨는데 

문자열 + EOF 를 콘솔에 입력을 하게되면 문자열을 읽어나가다가 결국 EOF를 "만나"게되면 

반환값이 NULL이 되어야 한다고 생각하였는데 small_array배열의 주소가 반환이 되어서 

잘 이해가 되지 않아 질문드렸습니다.

다른것 없이 EOF만 입력했을 때는 NULL이 정상적으로 출력되었습니다.

강민철님의 프로필

강민철

2022.02.14

아, 그러셨군요 :) 

fgets() 함수를 자세히 보면(링크) 첫째 인자로 char * 를 받아들입니다.

(fputs() 함수도 마찬가지이지요. )

즉, fgets()는 문자열을 입력받을 적에 입력받는 문자열의 주소를 입력받습니다.

 

EOF는 더 이상 읽어들일 문자가 없다는 것을 나타내기 위한 매크로입니다. 

처음부터 EOF를 입력한다면 처음부터 읽어들일 문자가 없다는 것을 의미하므로 null이 출력될 것이고

문자열을 입력하고 EOF를 추가하면 fgets 입장에서는 문자열 주소를 입력받고 끝났다(EOF)는 것을 의미합니다.

 

혹시 이해가 가셨는지요? :)