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

C语言如何打印文件指针指向的文件内容并以数组形式输出

解决方法

你现有代码中的printf("%f", outfp)是错误用法:

  • outfp是FILE*类型的文件指针,本质是存储文件内核资源地址的变量,和文件内存储的数值没有直接关系,直接打印指针只会输出内存地址,搭配%f格式符还会触发未定义行为
  • 你以"w"模式打开outfp,该模式仅支持写操作,无法直接从该指针读取文件内容

具体实现步骤

有两种实现路径可选:

  • 路径1:修改outfp的打开模式为"w+",支持写入后读取,写入完成后调用rewind(outfp)将文件偏移指针重置到文件开头即可读取
  • 路径2:写完out.dat后先关闭outfp,再重新调用fopen("out.dat", "r")得到可读的文件指针
  • 后续读取文件中所有的double值,按数组格式打印即可,需要长期使用数值可以存入动态数组,仅打印的话可以边读边打

修改后的核心代码示例

你只需要替换原有代码中printf("%f", outfp);附近的逻辑即可:

// 原有打开outfp的代码修改为:
FILE *outfp= fopen("out.dat", "w+"); // 改w为w+,支持读写
if(outfp == NULL)
{
    printf("Unable to create file\n");
    return -1; // 打开失败直接退出,避免后续空指针报错
}

// -------------------原有写入outfp的逻辑不变-------------------
while(fgets(buffer, bufferLength, fp)) {      
    if (2==sscanf(buffer, "%lf %lf", &a,&b)){
        fprintf(outfp, "%0.25f\n", b);
    }
}
// -------------------新增读取打印数组逻辑-------------------
rewind(outfp); // 把文件指针移到开头
double tmp;
int is_first = 1;
// 边读边打印,不需要额外存储数据
printf("[");
while(fscanf(outfp, "%lf", &tmp) == 1) {
    if(!is_first) {
        printf(", ");
    }
    is_first = 0;
    printf("%0.25f", tmp);
}
printf("]\n");

// -------------------原有后续逻辑不变-------------------
printf("File transferred\n");
fclose(outfp);
fclose(fp);
fclose(fp1);
fclose(noisefp);
// 其余原有逻辑保留

需要存储数值到数组的版本

如果后续还需要操作这些数值,可以用动态数组存储:

rewind(outfp);
int arr_cap = 1024; // 初始数组容量,可按需调整
int arr_len = 0;
double* num_arr = (double*)malloc(arr_cap * sizeof(double));
double tmp;

// 循环读所有数值存入数组
while(fscanf(outfp, "%lf", &tmp) == 1) {
    if(arr_len >= arr_cap) { // 数组容量不足时自动扩容
        arr_cap *= 2;
        num_arr = (double*)realloc(num_arr, arr_cap * sizeof(double));
    }
    num_arr[arr_len++] = tmp;
}

// 打印数组
printf("[");
for(int i=0; i<arr_len; i++) {
    if(i>0) printf(", ");
    printf("%0.25f", num_arr[i]);
}
printf("]\n");

// 使用完后释放动态内存
free(num_arr);

内容的提问来源于stack exchange,提问作者Margi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:54:09