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()andの形式は、 fwrite()K&R、第 2 版、247 ページに準拠しています。

于 2013-08-01T19:58:12.160 に答える