1

私はいくつかのコードを手に入れました、そして私はファイル内のバイトを見つけて置き換えるようにそれを改善したいので、FILE内のすべてのorigbytesを見つけてからそれをnewbytesに置き換えてからファイルを保存したいです文字のバイト?

 FILE* file;
 file = fopen("/Users/Awesome/Desktop/test", "r+b");
 int size = sizeof(file)+1;
 char bytes [size];
 fgets(bytes, size, file);
 for (int i=0; i<size; i++){ 
     char origbytes  []  = {0x00, 0x00};
     char newbytes   []  = {0x11, 0x11};
     if (strcmp(bytes[i], origbytes)) //Here the problem
     {
         fseek(file, i, SEEK_SET);
         fwrite(newbytes, sizeof(newbytes), 1, file);
     }
 }
 fclose(file);
4

4 に答える 4

4

strcmp()文字列比較用であり、文字比較用ではありません。2つの文字を直接比較できます

if ( bytes[i] == origbytes[something] )

sizeof()また、ファイルサイズを決定するためにファイルポインタを適用しないでください。を使用してファイルの終わりを探してから、バイナリファイルを除いてfseekクエリを実行する必要があります。バイナリファイルの場合は、次のようなものを使用しますftell fstat

もう1つ注意すべき点はfgets、改行が表示された場合、EOFのかなり前に戻ることです。したがって、コードでは、提案した変更を行った後でも、ファイルの内容全体を読み取ることができない場合があります。適切に使用する必要がありますfread

于 2012-05-14T12:41:09.040 に答える
1

C標準ライブラリでは、文字列はnullで終了します。検索データは事実上、長さがゼロの文字列です。memcmp代わりに必要です。

memcmp (&bytes [i], origBytes, 2)
于 2012-05-14T12:41:48.947 に答える
1

まず、sizeof(file)+ 1は、ポインタのサイズ+1を返します。ファイルのサイズにこれは必要ないと思います。これを使用してください:Cでファイルのサイズをどのように決定しますか? 次に、バイト(多かれ少なかれcharとしてのsmae)を比較するので、=を使用して単純に比較します。

于 2012-05-14T12:42:20.723 に答える
0

fseek関数を使用してからftell関数を使用して、sizeofではなくファイルサイズを取得できます。

于 2012-05-14T14:59:47.323 に答える