錯誤代碼
fprintf_s(ofile, "%d", (int *)&data[i]); // 參數類型錯誤
問題分析
%d 對應 int,傳入 (int*)&data[i] 是 int* 類型
data 定義不明,若為 int data[],應直接傳 data[i]
sizeof(data) 在函數參數中退化為指針大小,非數組長度
修正版本
// 假設 data 為 int data[100];
int count = sizeof(data) / sizeof(data[0]); // 正確計算長度
for (int i = 0; i < count; i++) {
if (fprintf_s(ofile, "%d\n", data[i]) < 0) break; // 直接傳值,添加換行
}
fprintf_s vs fprintf
fprintf_s:微軟安全版,參數檢查更嚴格,需 #define __STDC_WANT_LIB_EXT1__ 1
- 跨平台項目推薦標準
fprintf + 手動緩衝區檢查
完整文件寫入示例
FILE *fp;
errno_t err = fopen_s(&fp, "data.txt", "w");
if (err != 0) return;
for (int val : data) {
fprintf(fp, "%d\n", val);
}
fclose(fp);