83.2 JSON 파일 읽기

본격적으로 JSON 문서를 파싱해보겠습니다. 먼저 다음과 같이 파일의 내용을 읽어서 문자열 포인터를 반환하는 함수를 작성합니다.

char *readFile(char *filename, int *readSize)    // 파일을 읽어서 내용을 반환하는 함수
{
    FILE *fp = fopen(filename, "rb");
    if (fp == NULL)
        return NULL;

    int size;
    char *buffer;

    // 파일 크기 구하기
    fseek(fp, 0, SEEK_END);
    size = ftell(fp);
    fseek(fp, 0, SEEK_SET);

    // 파일 크기 + NULL 공간만큼 메모리를 할당하고 0으로 초기화
    buffer = malloc(size + 1);
    memset(buffer, 0, size + 1);

    // 파일 내용 읽기
    if (fread(buffer, size, 1, fp) < 1)
    {
        *readSize = 0;
        free(buffer);
        fclose(fp);
        return NULL;
    }

    // 파일 크기를 넘겨줌
    *readSize = size;

    fclose(fp);    // 파일 포인터 닫기

    return buffer;
}

파일을 연 뒤 파일의 크기를 구합니다. 그리고 파일 크기 + NULL 공간만큼 메모리를 할당하고 0으로 초기화합니다. 파일 읽기에 성공했다면 readSize를 역참조하여 파일 크기를 넣어주고, buffer를 반환합니다.

이렇게 하면 readFile 함수를 호출하는 쪽에서는 문자열 포인터를 반환값으로 받고, 파일 크기는 매개변수를 통해 받으므로 결괏값을 두 개 받는 효과를 낼 수 있습니다.