-1

ファイルを読み取って、元のファイルと同じ内容であるが 4 バイトごとに削除された別のファイルを生成する必要がある問題を解決しようとしています。

int main()
{
  FILE *p;
  FILE *q;
  int i=0,k=0;
  char c;

  p = fopen("C:\\Users\\Teja\\Desktop\\Beethoven.raw","rw");
  q = fopen("C:\\Users\\Teja\\Desktop\\Beethoven_new.raw","w+");

  printf("%x is the EOF character \n",EOF);
  while((c=fgetc(p))!=EOF)
  {

     if(i==3){
      i=0;
      printf("Removing %x %d \n",c,k++);
     }
     else{
      printf("Putting %x %d \n",c,k++);
      fputc(c,q);
      i++;
     }
  }
  fclose(p);
  fclose(q);

  return 0;
}

読み取ろうとしていたファイルは .raw ファイルで、約 10 ~ 15 MB です。上記のコードは、通常 88 バイト後にファイルの読み取りを停止することに気付きました。大きなファイルを読み取る方法はありますか、それとも何か間違っていますか?

4

2 に答える 2

2

既に指摘したことに加えて、ファイルを開く際の注意: ファイルがバイナリ ファイルにあるように聞こえます。つまりb、モード文字列に a を追加する必要があります。さらに、rwはモードではありません。これは、pwantから読み取るだけで、 wantまたはrbにのみ書き込むためです。qwbwb+

ところで、fgetcint を返す必要がある理由は、 が 257 の一意の値を返さなければならないためです。通常、EOF を表す一意の値だけでなく、のfgetcすべての可能な値です。char0x000xFF-1

于 2012-10-07T17:28:58.937 に答える
1

変化する

char c;

int c;

fetgetc()の戻り値の型は an intand notcharです。

于 2012-10-07T17:28:25.320 に答える