C语言write_integer函数FILE*与const char*传参不兼容问题求解
问题错误点
- 核心逻辑错误:对
write_integer函数的参数定义理解偏差。该函数第一个入参const char *filename要求传入的是文件路径字符串,而非提前打开得到的FILE*类型指针,直接传指针必然触发类型不兼容报错。 - 冗余操作错误:不需要在
main函数中提前打开目标文件,write_integer的设计逻辑是内部自行完成「打开文件-写入数据-关闭文件」的全流程,外部提前打开不仅多余,还会因为同一文件被重复占用导致函数内部打开失败。 - 变量重定义错误的原因:同一个作用域内不能定义两个同名变量,先后定义
const char *f和FILE *f属于重名,自然会报错。 - 写入逻辑和
wb模式不匹配:当前用fprintf写入是将整数转成文本字符串写入,属于文本写入逻辑,和wb二进制写入的要求不匹配,应该用fwrite直接写入int类型的内存数据。
修正后的完整代码
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdbool.h> bool write_integer(const char* filename, int i) { FILE* f = fopen(filename, "wb"); if (f == NULL) { return false; } // 按二进制格式写入int数据,符合wb模式要求 fwrite(&i, sizeof(int), 1, f); fclose(f); return true; } int main(void) { // 直接传文件名字符串即可,不需要提前打开文件 bool write_ok = write_integer("file.txt", 48); if (!write_ok) { // 写入失败返回非0错误码 return 1; } return 0; }
内容的提问来源于stack exchange,提问作者Gabriel Burzacchini
相关产品推荐
相关产品推荐

