아니요, fgets
은 C99 또는 현재 표준 인 C11에서 실제로 사용되지 않습니다. 그러나이 자습서의 저자는 NUL을 만날 때 fgets
이 멈추지 않고 그러한 문자를 읽는 것을보고 할 수있는 메커니즘이 없다는 것이 맞습니다.
fgets
함수 스트림 s
가리키는 배열 stream
가리키는에서 n
의해 지정된 문자의 수보다 많아야 하나 이하 읽는다. 개행 문자 이후 (또는 유지됨) 또는 파일 끝 이후에 추가 문자를 읽지 않습니다.
(§7.21.7.2)
GNU의 getdelim
및 getline
는 당신이 POSIX 플랫폼을 타겟팅하는 경우, 다음이 대신들을 사용하는 나쁜 생각하지 않을 수 있습니다, POSIX 2008 표준화되었다.
편집 내가 NUL 문자의 얼굴에 fgets
를 사용하는 절대적으로 안전한 방법이 없었다 생각했지만, R .. (주석 참조)은이 지적 :
char buf[256];
memset(buf, '\n', sizeof(buf)); // fgets will never write a newline
fgets(buf, sizeof(buf), fp);
이제 마지막을 찾아 비 \n
문자는 buf
입니다. 그래도이 kludge는 실제로 권장하지 않습니다.
그래서'fgets'는 줄 바꿈 문자를 검색하여 null 바이트를 계속 읽습니까? –
@VilhelmGray : 맞습니다. 첫 번째 '\ 0'이 'fgets'에 의해 추가되었는지 확인할 방법이 없습니다. –
null 바이트는 ** 텍스트 ** 파일에 속하지 않습니다.'fgets()'는 텍스트 파일을 처리하도록 설계되었습니다. 바이너리 데이터 파일과 함께'fgets()'를 사용하는 것은 권장하지 않습니다. – pmg