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

问题描述 投票:0回答:4
// 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的事实是空的,但我不明白为什么?我正在尝试连接具有多个客户端的服务器,客户端初始化等待连接。

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

c file segmentation-fault
4个回答
0
投票

archivo[i] = '\0';

while循环终止后。这将在你的字符串qazxsw poi的末尾添加空字符

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


0
投票

在使用之前验证archivo不是NULL。我打赌fopen失败了,这导致f_in为NULL。以后当你打电话给f_in时,它会崩溃。

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


0
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.