You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:36:05