fgets 질문

astrayne Reply 9 years 30 weeks ago
#include <stdio.h> int main() { char array[1000]={}; while (1) { fgets(array, 1000, stdin); printf("%s", array); if(fgets==NULL) exit(1); } return 0; } 이 코드를 실행해서 input에 여러줄의 문자열을 넣어주면 왜 마지막 줄은 출력되지 않고 프로그램도 끝나지 않는건가요?
booksky Reply 9 years 30 weeks ago
일단 fgets함수에 대해서 설명하기 전에 코드에서 잘못된 점부터 먼저 짚고 가겠습니다. 1. if(fgets==NULL) 조건문이 잘못되어있죠. fgets는 함수이름이기 때문에 저런 식으로 정의내릴 수 없겠죠. 2. exit(1); 리눅스 환경에서 사용할 수 있는 시스템콜입니다. 윈도우환경에서는 사용할 수 없으므로, exit가 아니라 return을 쓰는게 옳습니다.(리눅스에서는 return을 쓰면 exit 시스템콜로 변경하지만 윈도우즈는 리눅스와 커널이 다르기 때문에 exit가 없습니다. 자세한 내용은 OS시간이나 시스템 프로그래밍 시간에 배우게 될 것입니다.) 아마 제 생각에는 마지막줄이 출력이 안되는게 아니라 마지막줄이 계속해서 출력될 것 같습니다. fgets함수는 기본적으로는 파일에서 string을 읽어오는 기능을 합니다. 파일부분을 stdin으로 선언해주면 gets와 같은 역할을 하게 되죠. fgets함수는 출력값으로 string을 복사한 곳을 가리키는 포인터값을 반환합니다. 만약 입력값이 없으면 NULL을 반환하겠죠. 저 코드를 제대로 실행하고 싶다면 아래와 같이 수정해야할 것입니다.(물론 좋은 코드는 아닙니다만...) #include <stdio.h> int main() { char* check; char array[1000]={}; while (1) { check = fgets(array, 1000, stdin); if(check==NULL) return 0; printf("%s", array); } } fgets함수에 대한 자세한 내용은 다음 링크를 참고하시기 바랍니다. http://www.cplusplus.com/reference/cstdio/fgets/