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

C语言编写文件读取双精度浮点数程序遇多个编译错误求解

问题修复方案

报错根因与解决

1. C1090 报错

这是Visual Studio生成调试符号(PDB)时的冲突错误,解决方案:

  • 关闭OneDrive、Mega等云同步工具对项目所在目录的同步
  • 或将项目迁移到未开启云同步的本地文件夹即可

2. C4024 与 间接寻址层级不匹配报错

两个报错属于同一类问题,根源是read_double函数的第二个参数是size_t*指针类型(作为输出参数返回读取到的元素个数),你在调用时直接传入了常量3,类型不匹配。

代码逻辑其他问题修复

你的现有代码还存在多处逻辑错误,需要一并修正:

  • fopen第二个参数错误:只读模式打开文件应该传字符串"r",你误传了指针参数size,会直接导致文件打开失败
  • 内存分配逻辑错误:每次循环都重新调用malloc,之前分配的内存会泄漏、且之前读取的数值会全部丢失,应该用realloc动态扩容
  • fscanf写入地址错误:每次都向data首地址写入数值,会覆盖之前的读取结果,应该写入当前数组下标对应的地址
  • 循环条件逻辑错误:size是指针,直接用value != (size+1)比较的是数值和内存地址,完全不符合预期,应该判断fscanf返回值是否为1(成功读取1个double)来控制循环
  • 输出参数赋值错误:要给size指向的内存赋值,应该解引用写*size = 读取个数,直接修改size指针本身的地址无意义

修复后完整代码

read.h

#if !defined READ_H
#define READ_H
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
extern double* read_double(const char* filename, size_t* size); 
#endif /* READ_H */

read.c

#include "read.h"

double* read_double(const char* filename, size_t* size) {
    // 只读模式打开文件
    FILE* f = fopen(filename, "r");
    /* 空指针校验 */
    if (f == NULL) {
        *size = 0;
        return NULL;
    }

    double* data = NULL;
    size_t count = 0;
    double temp;
    int read_ret;
    // 循环读取
    while ((read_ret = fscanf(f, "%lf", &temp)) == 1) {
        // 动态扩容
        double* new_data = realloc(data, (count + 1) * sizeof(double));
        if (new_data == NULL) {
            // 扩容失败,释放已分配内存
            free(data);
            fclose(f);
            *size = 0;
            return NULL;
        }
        data = new_data;
        data[count++] = temp;
    }
    // 读取异常判断:如果返回值不是EOF说明遇到了非数字内容
    if (read_ret != EOF) {
        free(data);
        fclose(f);
        *size = 0;
        return NULL;
    }
    // 赋值输出参数
    *size = count;
    fclose(f); 
    return data; 
}

int main(void) {
    size_t read_count = 0;
    double* data = read_double("this is a general routine test.txt", &read_count); 
    // 后续可根据read_count遍历data,使用完需要调用free(data)释放内存
    free(data);
    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 02:54:06