如何到达文件中特定行的开头?

时间:2017-04-26 16:15:59

标签: c

当我尝试使用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'

现在我理解错误,但我不知道如何解决它。请帮助。

另外,还有什么方法可以实现?

1 个答案:

答案 0 :(得分:1)

无符号数学。

sizeof(RGBTRIPLE)的值为3,类型为size_t,某些无符号类型。 (size_t在OP的机器上是unsigned long

-bi.biWidth的某些签名类型的值为-3,比size_t更窄,可能为int

乘以时,-3会转换为size_t类型,其值为18446744073709551613u0xfffffffffffffffd

此产品超过size_t

fseek()需要long,因此请使用long数学。

fseek(inptr, -bi.biWidth * (long) sizeof(RGBTRIPLE), SEEK_CUR)

此处RGBTRIPLE的类型不存在问题。 @Dmitri