2011-06-26 8 views
0

ファイル内の文字列を検索する小さなプログラムがあります。 この文字列の最後には可変部分があり、その前に常にサイズを示すバイトが続きます。例えばstrcmpが変わった

、私たちは "のhttp://" を探していますに "aaaaa.http://www.example.combbbbb" ""。(のASCIIコードが0x17のです

のは、私たちを言ってみましょうファイルを開いた 実行されるコードは次のとおりです。

while(car != EOF){ 
    car = fgetc(file[ii]); // we get everything in the file 
    lastBuffStart=ftell(file[ii]); 
    ij=1; 
    buffer[0]=car; // we start editing the buffer 
    printf("\n%d (%c) - %d (%c) ",car,car,base[0],base[0]); 
    while(ij<(buffsize-1)){ 
     buffer[ij]=fgetc(file[ii]); 
     printf("\n | %d (%c) - %d (%c) ",buffer[ij],buffer[ij],base[ij],base[ij]); 
     ij++; 
    } 

    fseek(file[ii],lastBuffStart,0); // we get back to the old position before the buffer continues 

    if(strcmp(buffer,base)==0){ // we compare 
     byteSize = (ftell(file[ii])-1); // we get the position of the size byte 
     printf("\nFound : 0x%x\n",byteSize); 
     } 
    } 

私たちは、すべてのファイルを読み込み、ベース(のhttp://)と比較するため、次の文字がバッファに入れた。

を私の問題は、printf( "\ n |%d(%c) - %d(%c)"、バッファ[ij]、バッファ[ij]、ベース[ij]、ベース[ij])を削除した場合です。 何も見つかりません ...

私が間違っていることは本当に分かりません。

私を助けることができますか?

ありがとうございます。

答えて

3

バッファをヌル終了するのを忘れました。代わりに、strcmpの代わりにmemcmpを使用するべきです。また、whileループの代わりにfreadを使用した場合、コードははるかに明確になります。

+0

ありがとうございました。それはとてもシンプルだった。なぜ私はそれを見ていないのか分かりません。 – MisterDoy