我写这篇文章的原因是因为没有其他关于 SO 的帖子可以解决我的问题。我已经阅读了关于这个主题的所有帖子并尝试/测试了这些建议,但它们在我发布的代码的上下文中不起作用 - 因此首先发布帖子......
我有以下函数,它在最后给出了一个额外的循环,在我创建的字符串的末尾添加了另一个字节。我尝试将 -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++;
}
}