fgets
cppreference.net에서
| 헤더에 정의됨 <stdio.h>
|
||
char* fgets( char* str, int count, FILE* stream );
|
(C99까지) | |
char* fgets( char* restrict str, int count, FILE* restrict stream );
|
(C99부터) | |
최대 count - 1 개의 문자를 주어진 파일 스트림에서 읽어서 str가 가리키는 문자 배열에 저장합니다. 구문 분석은 개행 문자를 만나면(이 경우 str에 해당 개행 문자가 포함됨) 또는 파일 끝에 도달하면 중지됩니다. 바이트를 읽고 오류가 발생하지 않으면 str에 마지막으로 기록된 문자 바로 뒤에 널 문자를 씁니다.
매개변수
| str | - | char 배열의 한 요소를 가리키는 포인터 |
| count | - | 쓸 최대 문자 수 (일반적으로 str의 길이) |
| stream | - | 데이터를 읽을 파일 스트림 |
반환값
str 성공 시, 실패 시 널 포인터.
파일 끝(EOF) 조건이 발생하면 eof 표시기를 stream에 설정합니다 (feof() 참고). 바이트를 전혀 읽지 못하게 하는 경우에만 실패로 간주되며, 이 경우 널 포인터가 반환되고 str이 가리키는 배열의 내용은 변경되지 않습니다 (즉, 첫 번째 바이트가 널 문자로 덮어쓰여지지 않습니다).
다른 오류로 인해 실패한 경우 error 표시기 (ferror() 참고)를 stream에 설정합니다. str이 가리키는 배열의 내용은 불확실합니다 (널로 종료되지 않을 수도 있습니다).
참고
POSIX는 추가로 에서 fgets이 읽기 오류가 발생하면 errno을 설정하도록 요구합니다.
표준 명세가 unclear한 경우(즉, count <= 1인 경우)에도 일반적인 구현은
count < 1이면 아무 것도 하지 않고 오류를 보고합니다.count == 1이면,
- 일부 구현은 아무 것도 하지 않고 오류를 보고합니다.
- 다른 구현은 아무 것도 읽지 않고
str[0]에 0을 저장한 후 성공을 보고합니다.
예제
이 코드 실행
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE* tmpf = tmpfile();
fputs("Alan Turing\n", tmpf);
fputs("John von Neumann\n", tmpf);
fputs("Alonzo Church\n", tmpf);
rewind(tmpf);
char buf[8];
while (fgets(buf, sizeof buf, tmpf) != NULL)
printf("\"%s\"\n", buf);
if (feof(tmpf))
puts("End of file reached");
}
출력:
"Alan Tu"
"ring
"
"John vo"
"n Neuma"
"nn
"
"Alonzo "
"Church
"
End of file reached
참조
- C23 표준 (ISO/IEC 9899:2024):
- 7.21.7.2 fgets 함수 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
- 7.21.7.2 fgets 함수 (p: 241)
- C11 표준 (ISO/IEC 9899:2011):
- 7.21.7.2 fgets 함수 (p: 331)
- C99 표준 (ISO/IEC 9899:1999):
- 7.19.7.2 fgets 함수 (p: 296)
- C89/C90 표준 (ISO/IEC 9899:1990):
- 4.9.7.2 fgets 함수
같이 보기
(C11)(C11)(C11) |
stdin, 파일 스트림 또는 버퍼에서 형식 입력을 읽습니다 (함수) |
(C11에서 제거됨)(C11) |
stdin 에서 문자열을 읽습니다 (함수) |
| 파일 스트림에 문자열을 씁니다 (함수) | |
(동적 메모리 TR) |
스트림에서 구분자/줄 끝까지 자동으로 크기가 조정된 버퍼로 읽습니다 (함수) |
C++ 문서 for fgets
| |