카테고리 없음

36. 파일 읽기(fgets)

리더2333 2020. 11. 8. 06:41
반응형

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
반응형