当我尝试使用fseek()返回文件中一行的开头时,出现错误。
我的代码如下:
fseek(inptr, -bi.biWidth * sizeof(RGBTRIPLE), SEEK_CUR)
bi.biwidth的类型为int32_t。
我收到以下错误:
runtime error: unsigned integer overflow: 18446744073709551613 * 3 cannot be represented in type 'unsigned long'
现在我理解错误,但我不知道如何解决它。请帮助。
另外,还有什么方法可以实现?
答案 0 :(得分:1)
无符号数学。
sizeof(RGBTRIPLE)
的值为3,类型为size_t
,某些无符号类型。 (size_t
在OP的机器上是unsigned long
-bi.biWidth
的某些签名类型的值为-3,比size_t
更窄,可能为int
。
乘以时,-3会转换为size_t
类型,其值为18446744073709551613u
或0xfffffffffffffffd
。
此产品超过size_t
。
fseek()
需要long
,因此请使用long
数学。
fseek(inptr, -bi.biWidth * (long) sizeof(RGBTRIPLE), SEEK_CUR)
此处RGBTRIPLE
的类型不存在问题。 @Dmitri