inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

1078

kskw20

작성한 질문수 8

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의 경우가 이해가 되지 않아 질문합니다.

c

답변 1

0

강민철

안녕하세요 :)

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

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

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

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

감사합니다.

 

0

kskw20

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

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

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

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

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

0

강민철

아, 그러셨군요 :) 

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

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

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

 

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

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

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

 

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

Export template 안됨

1

63

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

88

3

main 함수에서 왜 int만 선언이 되는걸까요

1

78

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

75

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

78

1

프로토타입과 함수간의 인자 불일치

1

87

2

12.12 헤더 관련 질문

1

74

2

Visual Studio Community 2026 사용 문의

1

169

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

71

2

getchar(), putchar()

1

111

3

강의자리ㅛ

1

93

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

127

2

소스파일안에 여러 파일

1

87

2

F5와 F7의 차이

1

90

2

c = TWO * (a+b); 에서 a와 b는?

1

67

2

; 세미콜론을 붙이는 기준에 문의

1

78

1

Step over 기능 문의

1

64

2

2.6 강의 따옴표 출력 규칙 문의

1

87

2

int main 함수 관련 오류 문의

1

76

2

13.4 words[0]

0

73

2

11.7 함수를 구현해 봤습니다.

1

67

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

71

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

60

2

11.6 fit_str함수를 구현해 봤습니다.

1

59

2