在预期整数的情况下使用的聚合值-error

时间:2018-05-15 10:23:12

标签: c

我使用以下代码作为函数的一部分

int encfile(FILE *fin, FILE *fout, aes *ctx, char* fn)
{   char            inbuf[16], outbuf[16];
    fpos_t          flen;

    ...
    fillrand(inbuf, 1);
    ..
    inbuf[0] = ((char)flen & 15) | (inbuf[0] & ~15);

我收到错误

aggregate value used where an integer was expected 

     inbuf[0] = ((char)flen & 15) | (inbuf[0] & ~15);

1 个答案:

答案 0 :(得分:1)

fpos_t是实现定义的类型。它只是保证是非数组类型。这意味着它可能是一个结构(在您的情况下似乎问题)。

无论哪种方式,fpos_t都应该只与fsetposfgetpos一起使用。您不应该使用它执行任何操作。

对于您的情况,如果您需要知道文件的长度,则应使用fstat

另外,如果您无权访问文件名,则可以使用 -

long int old_position = ftell(fp);
fseek(fp, 0, SEEK_END);
long int flen = ftell(fp);
fseek(fp, old_position, SEEK_SET);

这也不会破坏可移植性,因为fseekftell是C标准的一部分。