C,C++/개념 실습 프로그래밍
[C언어][Q&A] fread의 반복횟수에 대하여
luckybee
2023. 1. 14. 19:55
728x90
반응형
질문:
안녕하세요. do it c언어 책에 있는 반복 횟수 관련 설명이 잘 이해되지 않습니다.(p.521~522) 20바이트 배열을 4바이트씩 5번 파일에서 read 한 것과 20바이트로 1번 파일에서 read 한 것이 동일한 결과가 나오는 건가요?
답변:
네 맞습니다. 20바이트 배열을 4바이트씩 5번 파일에서 read한 것과 20바이트로 1번 파일에서 read 한 것이 동일한 결과가 나옵니다. 아래 코드를 보시면 이해가 잘 될 겁니다.
#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
int a=100; // int 안에 100 대입
int data[5] = {1,2,3,4,5}; // 1,2,3,4,5가 들어있는 int 배열
int temp[5] = {}; // 초기화만 시킨 int 배열
FILE* p_fp = fopen("1.dat", "wb"); //1.dat 파일을 바이너리 쓰기모드로 연다.
if (p_fp){ //정상적으로 쓰기모드가 완료됐다면 if 조건 안에 들어온다.
fwrite(&a, sizeof(int), 1, p_fp); //변수 a의 주소를 4바이트로 1번 쓴다.
fwrite(&data, sizeof(int), 5, p_fp);//그 뒤에 data 배열의 주소를 4바이트로 5번 쓴다.
}
fseek(p_fp, 0, SEEK_SET); // 파일 포인터를 다시 원점으로 되돌린다.
FILE* p_fp2 = fopen("1.dat", "rb"); //1.dat 파일을 바이너리 읽기모드로 연다.
if (p_fp2){ //정상적으로 읽기 모드가 되었다면 if 안으로 들어온다.
//fread(&temp, sizeof(data), 1, p_fp2); //20바이트를 1번만 읽었을 때의 값 100 1 2 3 4
fread(&temp, sizeof(int), 5, p_fp2); //4바이트를 5번 읽었을 때의 값 100 1 2 3 4
//두 fread는 같다.
for (int i = 0; i < 5; i++) {
printf("%d ", temp[i]); //출력해서 확인한다.
}
}
fclose(p_fp);
fclose(p_fp2); //파일 포인터를 열었으면 둘 다 닫아준다.
}
728x90
반응형