在c++編程中,可以使用fwrite函數來向文件中寫入數據。這個函數可以寫入任何數據類型的數據,包括字符串、數字、數組、結構體等等。下面我們就從多個方面對c++fwrite函數進行詳細闡述。
一、fwrite函數的基本用法
size_t fwrite(const void* ptr, size_t size, size_t count, FILE* stream);
該函數用於向文件中寫入數據,可以寫入任何類型的數據。其中,ptr為需要寫入的數據的指針;size為每個數據的字節數;count為要寫入數據的數量;stream為要寫入數據的文件指針。
例如,我們要將一個字符串寫入到文件中:
#include <stdio.h> int main() { FILE *fp; fp = fopen("file.txt", "w"); if (fp == NULL) { printf("fail to open file\n"); return 0; } char str[] = "hello world"; int len = strlen(str); fwrite(str, sizeof(char), len, fp); fclose(fp); return 0; }
上述代碼創建了一個文件指針,打開一個文件並向其中寫入了字符串“hello world”。
二、fwrite函數的返回值及錯誤處理
fwrite函數返回成功寫入的數據項數量,如果返回值少於count,說明發生了錯誤。
通常情況下,fwrite函數的返回值與count相等表示寫入成功,如果小於count,則表示發生了錯誤。我們可以利用ferror函數來判斷是否發生了錯誤,該函數返回非0值表示發生了錯誤。調用clearerr函數可以清除錯誤標誌,以便下一次讀寫操作。
下面是一個演示fwrite函數在寫入數據過程中的錯誤處理的示例:
#include <cstdio> int main() { FILE *fp1, *fp2; char buf[1024]; int n; fp1 = fopen("input.txt", "r"); fp2 = fopen("output.txt", "w"); if (fp1 == NULL || fp2 == NULL) { printf("fail to open file\n"); return -1; } while ((n = fread(buf, 1, sizeof(buf), fp1)) > 0) { if (fwrite(buf, 1, n, fp2) != n) { printf("write error\n"); } } if (ferror(fp1)) { printf("read error\n"); } clearerr(fp2); fclose(fp1); fclose(fp2); return 0; }
上述代碼演示了如何在讀取數據和寫入數據時進行錯誤處理,同時清除錯誤標誌並關閉文件。
三、fwrite函數的高級應用
1.向文件中寫入結構體數據
通過fwrite函數,我們可以將任何類型的數據寫入文件。我們也可以將結構體寫入到文件中,只需要將結構體指針作為數據源傳遞給fwrite函數即可。
#include <stdio.h> #include <string.h> struct Student { char name[20]; int age; float score; }; int main() { FILE *fp; fp = fopen("data.txt", "wb"); if (fp == NULL) { printf("fail to open file\n"); return -1; } Student s = {"Tom", 18, 95.5}; fwrite(&s, sizeof(Student), 1, fp); fclose(fp); return 0; }
上述代碼演示了如何將一個學生結構體寫入文件中。
2.向文件中寫入多維數組
如果需要向文件中寫入多維數組,我們需要將其轉換成一維數組,並且寫入文件的時候,需要按照行優先或者列優先的順序來寫入數據。
#include <stdio.h> #include <string.h> int main() { FILE *fp; fp = fopen("data.txt", "wb"); if (fp == NULL) { printf("fail to open file\n"); return -1; } int a[2][3] = {{1,2,3}, {4,5,6}}; int b[6]; memcpy(b, a, sizeof(a)); // 將二維數組轉換成一維數組 fwrite(b, sizeof(int), 6, fp); // 寫入一維數組 fclose(fp); return 0; }
上述代碼演示了如何將一個二維數組寫入文件中。
3.向文件中寫入二進制數據
如果需要向文件中寫入二進制數據,我們可以打開二進制文件,並且需要使用fwrite函數來寫入數據。
#include <stdio.h> int main() { FILE *fp; fp = fopen("data.bin", "wb"); if (fp == NULL) { printf("fail to open file\n"); return -1; } char buf[] = {0x48, 0x65, 0x6c, 0x6c, 0x6f}; fwrite(buf, sizeof(char), sizeof(buf), fp); fclose(fp); return 0; }
上述代碼演示了如何向文件中寫入二進制數據,也就是十六進制字符串“Hello”。
原創文章,作者:VQJII,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/372880.html