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;
}
반응형
'C' 카테고리의 다른 글
strcpy 함수와 strcat 함수 (2) | 2020.12.20 |
---|---|
fgets 함수 (0) | 2020.12.20 |
sprintf 함수와 fprintf 함수 (1) | 2020.11.20 |
EOF와 fclose() 함수 (0) | 2020.11.14 |
FILE* fopen(const char* file, const char* filemode) (0) | 2020.11.09 |