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

C语言从TXT文件读取数字,修改为动态数组后输出随机值原因求解

问题产生原因
  • 核心原因:文件指针未重置
    你通过while((m = fgetc(file)) != EOF)遍历整个文件统计逗号数量后,文件指针已经指向文件末尾,后续执行fscanf读取数字时全部读取失败。你声明的int n[counter]是栈上的可变长度数组,未初始化的内存本身存储的是随机垃圾值,所以最终输出乱码。
    修复该问题只需要在统计逗号的循环结束后,添加一行代码将文件指针重置到文件开头:
fseek(file, 0L, SEEK_SET);
  • 次要问题1:读取循环边界错误
    你当前读取数字的循环用的边界是res(文件总字节数),但实际数字总数是counter+1(N个逗号分隔N+1个数字),这个循环会访问数组超出边界的内存,触发未定义行为。应该将循环改为:
for (int i = 0; i < counter + 1; i++) {   
    fscanf(file, "%d,", &n[i]);
}
  • 次要问题2:缺少错误校验
    你没有校验fopen的返回值,如果目标文件不存在、无读取权限,fopen会返回NULL,后续直接操作空指针会导致程序崩溃。

  • 次要问题3:可变长度数组兼容性问题
    你使用的int n[counter]是C99标准才支持的可变长度数组,部分编译器(比如微软MSVC)不支持该特性。更通用的实现方式是使用malloc动态分配内存:

int *n = (int*)malloc(sizeof(int) * (counter + 1));
// 数组使用结束后释放内存
free(n);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:06:04