2012-01-11 52 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()的函數,但是對於二進制文件而言,它僅適用於文本,上面是我想到的。它似乎工作,但我想知道我是否使用了正確的方法。像PHP中的substr()一樣工作的C++函數

+2

很多的東西,你不應該在這裏做,但最明顯的問題是,你在一個時間(性能殺手)讀取一個字符,您嘗試overread如果'len個== 0'和'from!= 0',最後這是真正的C代碼,而不是C++。 – Jon 2012-01-11 02:15:12

+0

這個聲明有什麼作用? 「len =(len> 0)?fsize:fsize;」無論len是否爲零,它都將len設置爲fsize。錯誤? – selbie 2012-01-11 03:57:19

+0

應該是「遠離」的,以避免大文件出現問題。 – 2012-01-11 16:37:31

回答

0

取而代之的是for {}循環,使用

fread(new_data, 1, len, handle) 

此外,

len = (len > 0) ? fsize : fsize

始終將LEN到文件大小。也許你想:

len = (len > 0) ? len : fsize

相關問題