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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C - 读取文件错误..!f_in为空,不知道为什么?相关的知识,希望对你有一定的参考价值。

// 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”我得到“错误”

答案

archivo[i] = '\0';

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

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

另一答案

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

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

另一答案

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

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

另一答案

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

以上是关于C - 读取文件错误..!f_in为空,不知道为什么?的主要内容,如果未能解决你的问题,请参考以下文章

读取 csv 文件时雪花句柄为空

C语言readdir和opendir

C++ 中的 CSV 解析器不读取第一个元素

c-string用户输入为空时如何发送错误消息?

C - 文件的读取()错误,存储在数组中并正确打印输出

java读取文件操作