2016-05-15 110 views
-2

我嘗試將數據從mp3文件複製到另一個文件。將mp3文件的數據複製到另一個文件。 C

但是我從文件中得到的所有章程都是'-1'ASCCI。

我通過「rb」模式打開了scannedFile。

這是代碼:

// scannedFile = music.mp3, lastByte = 1000, firstByte = 3 
char* data = calloc(lastByte - firstByte + 2, sizeof(char)); 
for (i = 0; i <= lastByte - firstByte; i++) 
{ 
    c = fgetc(scannedFile); 
    if (c == 0) // if the char is 0 (END OF STRING) change it for another charter. 
     c = 1; 
    data[i] = c; 
} 
+0

mp3文件是二進制文件,將包含非ascii字符,不會以null結尾。您的代碼正在等待文本文件並會損壞二進制文件。 – antlersoft

+0

@antlersoft嘿,但我用「rb」模式打開'scannedFILE'。 它也沒有工作.. –

+0

MP3文件不是一個字符串,所以0字節是完全不相關的,並不標誌着它的結束。 – immibis

回答

1

看一看這裏:fgetc

上面說的是回報可以是當前char或EOF這實際上是-1:

成功時,返回字符(提升爲int值)。 返回類型爲int以適應特殊值EOF,這表示失敗: 如果位置指示符位於文件結尾,則函數返回EOF並設置流的eof指示符(feof)。 如果發生其他讀取錯誤,該函數也會返回EOF,但會設置其錯誤指示符(ferror)。

因此,您應該查看流的EOF指標以及錯誤指標(ferror)以獲取答案。

+0

好吧,那麼你有什麼想法我需要做的是讀取mp3文件的數據? –

+0

@YairB。爲了得到這個想法,我需要知道你試圖使用的文件句柄。 –

0

好的,我解決了我的問題,我是fseek問題。 謝謝大家的幫助:)

+0

所以你只是打EOF ......就像我說的。 –

+0

@ ZverevEugene是的,我如何標記問題解決? –

+0

接受您發佈的答案。我認爲,在發佈答案和可以接受答案之間有一段時間。 (IIRC:9分鐘) – user3629249

相關問題