C - 读取文件错误..!f_in为空,不知道为什么?

时间:2013-01-10 10:07:43

标签: c file segmentation-fault

// 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是null,但我不明白为什么?我正在尝试连接具有多个客户端的服务器,客户端初始化等待连接。

命令verificion“if”我得到“错误”

4 个答案:

答案 0 :(得分:0)

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

如果不是这种情况,请尝试使用cgdb调试应用程序,并查看导致崩溃的行。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

添加

archivo[i] = '\0';
while循环终止后

。这将在字符串archivo

的末尾添加null charachter

也可能是archivo数组的内存空间不足以获取文件的全部内容,因此可能导致缓冲区溢出,从而导致崩溃

答案 3 :(得分:0)

你没有检查“archivo”的数组边界 这对我来说首先要检查