我写这篇文章的原因是因为SO上没有其他帖子解决了我的问题。我已经阅读了关于这个主题的所有帖子,并尝试/测试了这些建议,但是他们没有在我发布的代码的上下文中工作 - 因此帖子首先......
我有以下功能,它在最后给出一个额外的循环,在字符串Im创建的末尾添加另一个字节。我试过在循环变量中添加-1,但似乎没有什么可以摆脱这个额外的循环。 feof是这次练习的正确选择,还是fgetc更好?如果是这样,我如何在我的函数上下文中使用fgetc?
void do_file(FILE *in, FILE *out, OPTIONS *options)
{
char ch;
int loop = 0;
char buf[81];
buf[0] = '\0';
int seeker = offsetof(struct myStruct, contents.datas);
fseek(in, seeker, SEEK_SET);
fprintf(out, "%i", seeker);
while (options->max == -1 || loop < options->max)
{
if (feof(in))
{
break;
}
if (loop % 16 == 0)
{
if (strlen(buf) > 0)
{
buf[0] = '\0';
}
}
fread(&ch, 1, 1, in);
fprintf(out, "%02X", (int)(ch & 0x00FF));
if (isalnum(ch))
{
char tmp[2];
tmp[0] = ch;
tmp[1] = '\0';
strcat(buf, tmp);
}
loop++;
}
}