用C读取文件

时间:2012-07-10 15:35:06

标签: c file

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

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 ));
}

2 个答案:

答案 0 :(得分:2)

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

顺便提一下,你的程序还有其它问题:每次读取数字时重新分配整个数组都是非常低效的!最简单的事情是分配如此多的空间,你不需要它(不要担心“浪费”,只要你没有超过顶部)。第二个最简单的方法是测量文件的大小(您需要stat或其他一些)并估计其中的整数数。第三个最简单的,足够分配10000个整数,并仔细检查你什么时候用完并分配两倍于你已有的。

答案 1 :(得分:0)

您正在阅读整数,假设它们是以文本模式编写的。正如您所怀疑的那样,检查文件是文本文件还是二进制文件。如果您可以使用文本编辑器打开它并阅读内容,那么它就是一个文本文件。否则,您需要调整程序以读取二进制文件。