반응형
fgets 함수는 FILE 구조체를 사용하여 파일 입출력 스트림에서 문자열을 가져오는 함수이다.
char* fgets(char* str, int numChars, FILE* stream);
첫 번째 매개변수(str)에는 파일에서 읽은 문자열을 저장할 메모리의 주소를 넘겨주면 된다.
두 번째 매개변수(numChars)에는 저장할 문자의 최대 개수를 지정한다.
fgets 는 '\n' 문자를 만날 때 까지 문자열을 읽는 것이 보통이지만, 이 두 번째 매개변수를 넘어서면 읽기작업을 그만둔다.
세 번째 매개변수(stream)은 파일포인터를 넣어준다.
만약 fgets 함수가 파일에서 문자열을 읽기를 시도했는데, 파일을 끝(EOF)를 만나게 된다면,
fgets 는 NULL 을 반환할 것이다.
먼저 sample.txt 파일을 만들어서 아래와 같이 두줄의 문자열을 저장하자
(저장경로는 프로젝트 폴더)
abcdefghijklmnopqrstuvwxyz
0123456789
#include <stdio.h>
int main()
{
// sample.txt 를 읽기 전용(r)으로 text 모드(t)로 열기
FILE* pFile = NULL;
fopen_s(&pFile, "sample.txt", "rt");
if (pFile != NULL)
{
char str[128];
if (fgets(str, 128, pFile) != NULL)
{
// 읽어온 문자열을 화면에 출력한다.
printf("%s", str);
}
else
{
printf("파일에서 문자열을 읽지 못하였습니다.");
}
// 파일을 다 사용했으니, 파일을 닫는다.
fclose(pFile);
}
return 0;
}
// 결과
// abcdefghijklmnopqrstuvwxyz
당연히 한줄만 읽었으니, 한줄만 출력된다.
여러줄을 읽고 싶으면, fgets(...) != NULL 이 조건을
while( ) 문에 사용하면된다.
왜냐하면 fgets 는 파일의 끝(EOF)을 만나면 NULL 을 리턴하기 때문이다.
#include <stdio.h>
int main()
{
// sample.txt 를 읽기 전용(r)으로 text 모드(t)로 열기
FILE* pFile = NULL;
fopen_s(&pFile, "sample.txt", "rt");
if (pFile != NULL)
{
char str[128];
while (fgets(str, 128, pFile) != NULL)
{
// 읽어온 문자열을 화면에 출력한다.
printf("%s", str);
}
// 파일을 다 사용했으니, 파일을 닫는다.
fclose(pFile);
}
return 0;
}
// 결과
// abcdefghijklmnopqrstuvwxyz
// 0123456789
반응형