Programming language
구조체를 파일로 저장, 불러오기
taehwan
2012. 6. 16. 00:28
작성한 코드는?
구조체를 파일로 저장하고, 저장된 구조체를 다시 불러와 출력하는 예제 코드입니다.
createStruct() 함수에서 구조체를 초기화
userInfo 구조체를 선언 문자열 : name[20], 문자열 : sex[3], 정수 : age
userInfo.dat로 저장한다.
결과
작성 한 코드의 결과
파일로 저장된 userInfo.dat 결과
예제로 작성한 구조체
struct userInfo { char name[20]; char sex[3]; int age; };
주요 소스코드 설명
데이터 입력 함수를 따로 만들어 작성하였고, 편의상 가장 기본적인 방법으로 작성하였습니다. for, while로 작성하지 않고 그냥 작성하였습니다.
원본 : Win32 Api 연구 사이트
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
ptr : 출력할 데이터가 들어 있는 번지
size : 출력할 항목의 크기
n : 출력할 항목의 개수
stream : 출력할 파일
size_t fread(const void *ptr, size_t size, size_t n, FILE *stream);
ptr : 읽어들일 메모리 주소
size : 불러올 항목의 크기
n : 불러올 항목의 개수
stream : 읽어 들일 대상
소스코드
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "struct.c" struct userInfo tmp[3]; void createStruct() { strcpy(tmp[0].name, "a"); strcpy(tmp[0].sex, "m"); tmp[0].age = 26; strcpy(tmp[1].name, "b"); strcpy(tmp[1].sex, "m"); tmp[1].age = 30; strcpy(tmp[2].name, "c"); strcpy(tmp[2].sex, "f"); tmp[2].age = 25; } int main() { FILE *f; struct userInfo buf[3]; createStruct(); //초기화 if((f = fopen("userInfo.dat", "w")) == NULL) { printf("cannot open file for writing.\n"); exit(1); } fwrite(tmp, sizeof(struct userInfo), 3, f); fclose(f); if((f = fopen("userInfo.dat", "r")) == NULL) { printf("cannot open file for reding.\n"); exit(1); } fread(buf, sizeof(struct userInfo), 3, f); int i; for(i = 0; i<3; i++) { printf("name = %s, sex = %s, age = %d\n", buf[i].name, buf[i].sex, buf[i].age); } fclose(f); return 0; }