c - C语言读取文件

标签 c file

我有这段代码可以从文件中读取整数。 我使用相同的代码从另一个文件中读取 double 并且工作得很好,但是这次循环是 变得无限。可能是什么?我正在阅读的文件 是由程序编写的,是吗?我不知道 这是什么意思,但我的操作系统说该文件是 二进制。那么,任何帮助将不胜感激。谢谢。

i=1;
cadeia = malloc ( i * sizeof(int) );
if (!cadeia){ //Avalia se a alocação de memória foi bem sucedida
  printf("Problema na alocação de memória para cadeia.");
  exit(0);
}
while ( !feof( arq_cadeia ) ){ /*Fazendo leitura e alocação de memória da matriz de transição*/
   fscanf ( arq_cadeia , "%d" , ( cadeia+i-1 ) );
   i++;
   cadeia = realloc ( cadeia , i * sizeof( int ) );
   if (!cadeia){ //Avalia se a alocação de memória foi bem sucedida
  printf("Problema na alocação de memória para cadeia.");
  exit(0);
   }
   printf("%d\n", *( cadeia+i-1 ));
}

最佳答案

你的预感是对的,如果你的文件是二进制格式,scanf 无法读取它。如果您无法使用文本编辑器(例如记事本)查看数字,scanf 也无法读取它们。

顺便说一句,您的程序还有其他问题:每次读取数字时都重新分配整个数组,效率极低!最简单的事情是分配如此多的空间,以至于您不需要所有空间(不要担心“浪费”,只要您不超出顶部即可)。第二个最简单的方法是测量文件的大小(您需要 stat 或类似的东西)并估计其中的整数数量。第三个最简单,分配足够 10000 个整数,并仔细检查何时用完并分配两倍于已有的。

关于c - C语言读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11416864/

相关文章:

棋盘游戏...但另一种

c - 巨大的数组导致段错误

java - 使用 org.json 解析 Java 中 JSONArray 中的内部 JSON 文件

linux - 使用 dentry inode 创建的文件与打开的系统调用 inode 之间的关系?

c - Valgrind 错误但没有泄漏

c++ - 在 C/C++ 中取消引用 char 指针?

c - 如何获得2xn矩阵的所有可能组合

javascript - 从二进制文件javascript中读取 float

php - 在 PHP 中存储易于编辑的配置数据的最快方法?

linux - 终端 Linux - 引用可执行文件 - 没有这样的文件或目录