작성
·
993
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
안녕하세요 :)
음.. 질문을 이해하기가 조금 어려운데,
문자열 + EOF의 경우 문자열까지 입력이 됩니다만, 보통 그렇게 입력하는 상황은 잘 없습니다.
혹시 문제가 발생하는 상황이나
궁금한 점을 조금 더 명확히 말씀해주시면 더 자세한 답변이 가능할 듯 합니다 :)
감사합니다.
아, 그러셨군요 :)
fgets() 함수를 자세히 보면(링크) 첫째 인자로 char * 를 받아들입니다.
(fputs() 함수도 마찬가지이지요. )
즉, fgets()는 문자열을 입력받을 적에 입력받는 문자열의 주소를 입력받습니다.
EOF는 더 이상 읽어들일 문자가 없다는 것을 나타내기 위한 매크로입니다.
처음부터 EOF를 입력한다면 처음부터 읽어들일 문자가 없다는 것을 의미하므로 null이 출력될 것이고
문자열을 입력하고 EOF를 추가하면 fgets 입장에서는 문자열 주소를 입력받고 끝났다(EOF)는 것을 의미합니다.
혹시 이해가 가셨는지요? :)
강의에서 fgets()함수가 EOF를 "만나면" NULL을 반환한다고 하셨는데
문자열 + EOF 를 콘솔에 입력을 하게되면 문자열을 읽어나가다가 결국 EOF를 "만나"게되면
반환값이 NULL이 되어야 한다고 생각하였는데 small_array배열의 주소가 반환이 되어서
잘 이해가 되지 않아 질문드렸습니다.
다른것 없이 EOF만 입력했을 때는 NULL이 정상적으로 출력되었습니다.