char *fgets(char *str, int count, FILE *stream); // c99
char *fgets(char *restrict str, int count, FILE *restrict stream); // since c99
인자내용은 다음과 같다.
char *str : char 배열의 요소에 대한 포인터
int count : 파일로 부터 읽을 수 있는 최대 문자 수
FILE *stream : 데이터를 읽어들일 파일 스트림의 주소
반환 값 : 성공 시 str의 주소, 실패 시 NULL
내용 : fgets() 함수는 count길이 만큼 파일을 읽어서 str에 저장하는 함수이다.
저장 도중에 줄바꿈 문자('\n') 또는 파일의 끝에 도달하면 그즉시 읽어들이는 것을 멈춘다.
또한 오류가 발생하거나 중간에 읽기를 중지한 것이 아니라면
count만큼 읽어들이는 것이 아닌 count - 1 만큼 읽고 나머지 1바이트는 null문자를 써준다.
예제
[test.txt]
[ex_fgets.c]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE* fp;
char str[10];
char* result;
fp = fopen("test.txt", "rt");
if (fp != NULL)
{
while ((result = fgets(str, 10, fp)) != NULL)
{
printf("result주소 : %p\n", result);
printf("str주소 : %p\n", str);
printf("read: %s", str);
}
fclose(fp);
}
return 0;
}
[설명]
test.txt를 읽어들이는데 한번 읽을 때마다 9바이트만큼 읽는다.
그런데 test.txt는 문자 5개마다 줄바꿈을 하고있다.
따라서!!!
6바이트만 읽고 7바이트에 NULL을 저장하고 반환
1번째 사이클>
str = a b c d e \n NULL
2번째 사이클>
str = f g h i j \n NULL
...
1번째 사이클 메모리
https://en.cppreference.com/w/c/io/fgets
fgets - cppreference.com
char *fgets( char *str, int count, FILE *stream ); (until C99) char *fgets( char *restrict str, int count, FILE *restrict stream ); (since C99) Reads at most count - 1 characters from the given file stream and stores them in the
en.cppreference.com
'c언어' 카테고리의 다른 글
4. 기본 입출력 함수 (3) | 2023.05.27 |
---|---|
[문법] getchar()/putchar() (0) | 2023.05.08 |
3. 기본 이론과 개발 도구의 활용 연습문제 (0) | 2023.04.30 |
2. C언어 입문 연습문제 (0) | 2023.04.26 |
1. C언어를 배우기 전에 알아야 할 것들 연습문제 (1) | 2023.04.18 |