将fpos_t强制转换为int或char

sj7*_*755 4 c c++ types casting file

我正在使用一个函数,该函数使用按位操作和文件的长度: fpos_t flen;

当我尝试将其转换为int或char,或尝试对其进行算术运算时,它会因以下编译错误而失败: error: aggregate value used where an integer was expected

Rob*_*edy 6

你是在滥用这种类型.首先,它不代表长度.它代表一个位置.其次,它只是用来打电话fsetpos.你不打算对它进行算术,因为它不一定代表数字类型.它包含您的库需要能够执行fsetpos操作的任何信息.在库的实现中,fpos_t似乎是聚合类型,例如结构.(您可以检查头文件中的定义以确定,但不要依赖于您在那里发现的任何内容;它可能在其他平台或标准库的未来版本中有所不同.)

至于你的下一步,考虑一个更直接的问题,当你提出在a上进行按位操作的想法时,如何解决你正在处理的任何问题fpos_t.

  • 我问那个给我代码的人.他说,几年前他在Solaris上使用它时编译得很好.我在VMWare上安装了Solaris 11,编译了程序,发现fpos_t是一个整数类型.换句话说,Solaris上的fpos_t与Linux上的fpos_t .__ pos相同.我已经改变了代码,让它编译,并发现它正常工作. (2认同)