0

我写这篇文章的原因是因为没有其他关于 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++;
    }
}
4

0 回答 0