C 在需要整数的位置使用的聚合值-错误

C 在需要整数的位置使用的聚合值-错误,c,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); 我犯了一个错误

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

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);
我犯了一个错误

fpos_t是实现定义的类型。它只是保证为非数组类型。这意味着它可能是一个结构,在您的案例中似乎是一个问题

无论哪种方式,fpos_t都应仅用于fsetpos和fgetpos。您不应该用它执行任何操作

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

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

long int old_position = ftell(fp);
fseek(fp, 0, SEEK_END);
long int flen = ftell(fp);
fseek(fp, old_position, SEEK_SET);
这也不会破坏可移植性,因为和是C标准的一部分

据我所知,fpos_t不一定是整数类型。如果不是,那么对其使用位运算符就没有意义。
long int old_position = ftell(fp);
fseek(fp, 0, SEEK_END);
long int flen = ftell(fp);
fseek(fp, old_position, SEEK_SET);