티스토리 뷰

728x90

작성한 코드는?

 구조체를 파일로 저장하고, 저장된 구조체를 다시 불러와 출력하는 예제 코드입니다.

 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 연구 사이트

   http://winapi.co.kr/

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;
}





댓글