我正在阅读一个C语言文本文件。我需要找到第一个出现的特定字符('('
)并将指针移动到那个位置。我通过阅读缓冲区,然后使用strchr
查找字符来实现这一点。然后我查找字符的位置。问题是,如果我读入缓冲区直到文件末尾,它会设置EOF指示符,即使我返回到字符的位置,EOF指示符还是会被设置,并且会扰乱代码的其他错误处理,那么我如何确保当我返回到文件的内容时,EOF被设置为false呢?
int io_read_until_char(char stopchar, FILE * ifile)
{
char row[MAXCHAR];
int offset, read_len;
char * loc = NULL;
while (!feof(ifile))
{
if(fgets(row, MAXCHAR, ifile) == NULL)
{
strerror(errno);
break;
}
read_len = strlen(row);
loc = strchr(row, stopchar);
if(loc == NULL)
continue;
else
{
offset = -read_len + (int)(loc - row);
fseek(ifile, offset, SEEK_CUR);
break;
}
}
if(feof(ifile) && loc == NULL)
{
return(-1);
}
else if(ferror(ifile))
{
perror("Error in parsing stuff!\n");
strerror(errno);
return(-1);
}
else
return(0);
}
1条答案
按热度按时间g2ieeal71#
要清除流的文件结束指示符,可以调用函数
clearerr
。但是,这样做应该不是必须的,当调用函数
fseek
时,文件结束指示符会自动清除,假设函数调用成功。