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 为空,但我不明白为什么?我正在尝试将服务器与多个客户端连接,客户端已初始化等待连接。

命令验证“如果”我得到“错误”

4

4 回答 4

0

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

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

于 2013-01-10T10:10:07.490 回答
0

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

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

于 2013-01-10T10:10:41.057 回答
0

添加

archivo[i] = '\0';

在while循环终止之后。这将在字符串末尾添加空字符archivo

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

于 2013-01-10T10:17:20.143 回答
0

您没有检查“档案”的数组边界,这对我来说是首先要检查的

于 2013-01-10T10:20:37.323 回答