2012-01-11 10 views
0
char * extract(FILE * handle, int from, int len=0) 
{ 
    long fsize = filesize(handle); 
    fseek(handle, from, SEEK_SET); 
    len = (len > 0) ? fsize : fsize; 
    char * new_data = new char[len]; 

    for(int i = 0; i < len; i++) 
     new_data[i] = getc(handle); 

    return new_data; 
} 

int main() 
{ 
    FILE * file1 = fopen("output.txt", "rb"); 
    char * buffer = extract(file1, 0); 
} 

PHPでsubstr()と似た関数を作っていましたが、バイナリファイルではなくテキストのみで動作します。それはうまくいくようですが、正しいアプローチを使用したかどうかを知りたいと思っています。代わりにfor {}ループのPHPでsubstr()のように機能するC++関数

+2

あなたがここでやるべきではない、物事の多くが、ほとんどの明白な問題は、あなたが時間(パフォーマンスキラー)で1文字を読むことをしている、あなたは 'lenの場合overreadしてみてください== 0と 'from!= 0'そして最後にこれはC++ではなくCのコードです。 – Jon

+0

この声明は何をしていますか? "len =(len> 0)?fsize:fsize;" lenがゼロでないかどうかにかかわらず、lenをfsizeに設定します。バグ?大きなファイルでの問題を避けるには、 – selbie

+0

は "long from"にする必要があります。 –

答えて

0

、また、

len = (len > 0) ? fsize : fsize

は、常にファイルサイズにするLENを設定

fread(new_data, 1, len, handle) 

を使用しています。たぶん、あなたは望んでいた:

len = (len > 0) ? len : fsize

関連する問題