72.4 연습문제: 파일에 구조체 쓰기

다음 소스 코드를 완성하여 RectangleFileFormat 구조체의 내용을 rect.bin 파일에 저장하세요.

practice_file_write_struct.c

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

#pragma pack(push, 1)
struct Point2D {
    float x;
    float y;
};

struct RectangleFileFormat {
    short magic;
    int version;
    struct Point2D p1;
    struct Point2D p2;
    char desc[30];
};
#pragma pack(pop)

int main()
{
    struct RectangleFileFormat rf;
    memset(&rf, 0, sizeof(rf));

    rf.magic = 're';
    rf.version = 1;
    rf.p1.x = 4.5f;
    rf.p1.y = 2.1f;
    rf.p2.x = 9.2f;
    rf.p2.y = 8.7f;
    strcpy(rf.desc, "Rectangle File Format");

    FILE *fp = fopen(_________________);

    fwrite(_____________________);

    fclose(fp);

    return 0;
}

정답

 "rect.bin", "wb"
 &rf, sizeof(rf), 1, fp

해설

구조체의 내용을 파일에 저장하려면 파일을 바이너리 모드로 열어야 하므로 fopen 함수에 파일 모드를 "wb"로 지정합니다. 그리고 fwrite 함수는 fwrite(&rf, sizeof(rf), 1, fp);와 같이 버퍼에는 구조체 변수 rf의 주소, 쓰기 크기에는 구조체 변수의 크기, 쓰기 횟수에는 1을 넣어주면 됩니다.