C

fwrite() 함수

스누징어 2020. 12. 20. 15:21

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

 

매개변수(인자)

const void* buffer = 원본 데이터

size_t  size = 단위 크기를 결정(바이트)size_t count = size의 단위를 기준으로 한 개수

FILE* stream = 복사 대입할 장소

 

 

반환값(리턴값)

size_t = 성공한 count의 개수

(주의! 바이트 단위가 아니라 count의 개수이다.)

 

 

설명

* 원본 데이터의 자료형이 void*이므로 여러 자료형이 들어올 수 있다.

  내부적으로는 바이너리 형태로 복사 대입함을 유추할 수 있다.

 

* fwrite 함수가 복사할 총량은 size * count이다.

  반환값을 의미 있게 쓰는 게 아니라면 size와 count의 구분이 꼭 필요하지는 않다.

  하지만 size 매개변수를 "sizeof(자료형)" 이런 식으로 표현하면 가독성이 좋다.

  ex) fwrite(buffer, sizeof(int), 10, stream);

 

* fwrite 함수는 buffer를 사용한다. 이때 버퍼를 비우는 방식이 제한적이다.

  바이너리 형태로 복사하기 때문에 '\n'를 인식하지 못한다.

  때문에 fflush(); 사용하는 것이 가장 이롭다?

 

* 복사가 바이너리 형태인 것은 문자열을 다룰 때에도 생각해야 한다.

  배열의 끝에 NULL 있다 해도 NULL조차 복사하고 계속 진행한다.

  (배열의 끝을 믿고 크기를 크게 잡으면 이상한 부분까지 복사한다.)

  

 

예제

int main()
{
	char name[] = "전준영의 나이는 \0\n 20살이다.";

	FILE* stream = fopen("introduce.txt", "w");
	int num = fwrite(name, sizeof(char), sizeof(name) / sizeof(char), stream);

	printf("성공한 횟수: %d", num);
	

	return 0;
}

반응형