2013-01-10 84 views
0
// Trying to read file 


void readFilee(char *namefile){ 

    FILE *f_in = fopen(namefile,"r"); 
    char x; 
    int i = 0; 

    if(!f_in){ printf("Error"); exit(0); } 

    /* read to EOF */ 
    while(1){ 
     x = getc(f_in); 
     if(x == '\n') continue; 
      archivo[i] = x; 
     if(x == EOF) break; 
      i++; 
    } 
    tamArchivo = i; 
    fclose(f_in); 
} 

错误是f_in的事实是空的,但我不明白为什么?我试图连接一个服务器与多个客户端,客户端初始化等待连接。C - 读取文件错误..!f_in为空,不知道为什么?

命令verificion“如果”我得到“错误”

+0

你可以张贴'archivo'的定义是什么?请注意'getc()'返回一个'int'而不是'char'。 – hmjd

+0

您也可以检查fopen的调用是否成功(f_in应该为非null) – simonc

+0

您使用的是Linux吗?如果是这样,运行'gdb。/ yourprog'然后数字'where'并且给我们看结果 –

回答

0

while循环结束后添加

archivo[i] = '\0'; 

。这将在您的字符串的末尾添加空charachter archivo

也可能是你archivo阵列的存储空间不足以获取文件的全部内容,因此它可能导致缓冲区溢出,从而可能会导致一个崩溃

0

验证f_in不使用它之前NULL。我打赌fopen失败,这导致f_in为NULL。稍后当您拨打getc时,它会崩溃。

如果情况并非如此,请尝试使用cgdb调试应用程序,以查看哪条线导致崩溃。

0

尝试用while (!feof(f_in))代替while (1)。当文件结束时,这将退出循环。你不应该检查文件的结尾,就像你在循环中一样。这需要文件字符的结尾位于文件的某个位置。 EOF的值实际上是专门设计的,因此它不会出现在您的文件中。

其他要注意的事项是取消注释检查文件是否已成功打开。如果此检查失败,则不应尝试使用文件指针上的任何fxxx函数。

0

你不检查“档案馆” 那简直是对我的数组边界的第一件事就是检查

相关问题