0

我必须使用缓冲区复制位图图像文件。这是我需要做的一个例子。我必须一次将位图的不同部分读入缓冲区,然后将其写入目标文件。当我将不同的部分读入缓冲区时,前一个字符串被覆盖,最后一个读取的字符串只被写入。我不想对必须写入的每个部分都使用读写功能。请帮我写代码。

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

void fskip(FILE *fp, int num_bytes) {
  int i;
  for (i = 0; i < num_bytes; i++)
    fgetc(fp);
}

int main() {
  FILE *fp, *fp1;

  fp = fopen("c:\\users\\tapan\\desktop\\splash.bmp", "rb");
  fp1 = fopen("c:\\users\\tapan\\desktop\\splash2.bmp", "wb");

  int *j;
  j = (int *)malloc(3000);

  int k = 223121;
  int *i = &k;

  fread(j, 2, 1, fp);

  fread(j, 10, 1, fp);
  fwrite(j, 12, 1, fp1);

  fclose(fp1);
  fclose(fp);

  getch();
}
4

1 回答 1

2

首先,我将尝试解决您的具体问题,并避免对代码中的其他内容发表任何评论。

看起来fread()andfwrite()语句不正确。下面的代码可能更准确。

   int main() {
     FILE *fp, *fp1;

     fp = fopen("c:\\users\\tapan\\desktop\\splash.bmp", "rb");
     fp1 = fopen("c:\\users\\tapan\\desktop\\splash2.bmp", "wb");

     int *j;
     j = (int *) malloc(3000);

     int k = 223121;
     int *i = &k;

     // read 2 items of sizeof(int) into j from fp
     fread(j, sizeof(int), 2, fp);

     // read 10 items of sizeof(int) into j + 2 from fp
     fread(j+2, sizeof(int), 10, fp);

     // write 12 items of sizeof(int) from j to fp1
     fwrite(j, sizeof(int), 12, fp1);

     fclose(fp1);
     fclose(fp);

     getch();
   }
   // Note. The above code has NOT been tested, it is thrown-up here for discussion.

fread()和的格式符合fwrite()K&R,第二版,第 247 页。

于 2013-08-01T19:58:12.160 回答