如何使用fseek()在fread()函数中正确移动指针? (C)

时间:2016-12-09 13:57:03

标签: c pointers bmp

我正在尝试使用fseek()函数移动指针fread()以使fread()获取数据并将其传递给fwrite() n次。具体来说,我需要以n的比例放大bmp。

为了进行垂直放大,我试图使用fread()fseek()指针移回输入BMP的宽度。

输入和输出数据都是24位BMP。

fseek(inputPointer, lineBytes, SEEK_CUR);

为了计算偏移量,我使用了sizeof(pixel)* BMP * -1的宽度。

我的两个主要问题如下:

  1. 如何在代码行中检查指针的当前位置?
  2. fread()是否实际移动了通过它的指针,或只读取指针到文件末尾的所有内容?

1 个答案:

答案 0 :(得分:1)

  
      
  1. 如何在代码行中检查指针的当前位置?
  2.   

从您的问题的上下文中,我认为您正在询问如何查找流的当前位置。这将是ftell()fgetpos()的目的。前者是传统上与fseek()配对的另一个:

long offset = ftell(my_file);
  
      
  1. fread()实际上是移动通过它的指针还是只读取从指针到文件末尾的所有内容?
  2.   

使用更传统的术语" offset"而不是"指针"可以帮到你。在任何情况下,当前文件偏移量描述了文件开头之后的多少字节是将要读取或写入的下一个字节。因此,如果偏移量为0,则读取的下一个字节将是文件中的第一个字节;如果偏移量为16,那么读取的下一个字节将是17 th (跳过或已经读取了前16个字节)。 fread()可能会也可能不会从那里一直读到文件的末尾,具体取决于它的参数和文件的长度。

  

我试图将fread()指针移回输入BMP的宽度[...]   为了计算偏移量,我使用了sizeof(pixel) * width of BMP * -1

根据您的代码,我认为您的意思是您要将文件偏移量移动BMP 的宽度(以像素为单位),否则乘以sizeof(pixel)不会产生任何感。即便如此,这可能不是正确的因素。 sizeof(pixel)衡量程序的表示pixel(无论是什么)的大小,这可能与文件中占用的大小< / em>一个像素。如果他们确实不同,那么后者就是你想要的那个。

此外,如果你想向前或向后改变一行偏移,那么-1对我来说没有任何意义。 (无论您在(2)中询问的单个文件偏移值的具体含义如何,因为当您计算两个偏移之间的差异时,它会消失。)