// 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”我得到“错误”
答案 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
也可能是archivo
数组的内存空间不足以获取文件的全部内容,因此可能导致缓冲区溢出,从而导致崩溃
答案 3 :(得分:0)
你没有检查“archivo”的数组边界 这对我来说首先要检查