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

标签 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'

现在我明白了错误,但我不知道如何解决它。请帮忙。

此外,还有什么其他方式可以实现这一点?

最佳答案

无符号数学。

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

-bi.biWidth 具有比 size_t 窄的某些有符号类型的值 -3,可能是 int

相乘时,-3 将转换为 size_t 类型,值为 18446744073709551613u0xfffffffffffffffd

本产品超过size_t

fseek() 需要一个 long,所以使用 long 数学。

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

RGBTRIPLE 的类型在这里不是问题。 @Dmitri

关于c - 如何到达文件中特定行的开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43639564/

相关文章:

c++ - 图像如何在 opencl 内核中工作?

c - 在 C 中使用 long double 减法后会产生奇怪的结果

c - 在嵌入式设备上绑定(bind)不同的技术

c - 给定大于 256 的整数,如何在 C 中将整数转换为无符号字符?

android - 错误 :() undefined reference to `__android_log_write' ERROR?

python - 以编程方式读取 firefox 缓存

c - Arduino NTP,我想打印数据(DD-MM-YYYY)

c - 如何检查字符串前是否没有字符?

c - Polarssl Base64.c 错误检查

c - 如何将 utf8 字符串转换为 ascii 字符串?