2016-05-15 11 views
-2

私はmp3ファイルから別のファイルにデータをコピーしようとしています。mp3ファイルのデータを別のファイルにコピーします。 C

しかし、私がファイルから取得するすべてのチャーターは '-1' ASCCIです。

私はscanFileを "rb"モードで開きます。

これはコードです:

// 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値に昇格)。 戻り値の型は、エラーを示す特別な値EOFに対応するint型です。 位置インジケータがファイルの終わりにあった場合、関数はEOFを返し、ストリームのeofインジケータ(feof)を設定します。 他の読み取りエラーが発生した場合、関数はEOFも返しますが、その代わりにエラーインジケータ(ferror)を設定します。

ストリームのEOFインジケータとその答えのエラーインジケータ(ferror)を調べる必要があります。

+0

私はmp3ファイルのデータを読むために行う必要がありますか? –

+0

@ YairB。アイデアを得るには、使用しようとしているファイルハンドルが何であるかを知る必要があります。 –

0

問題は解決しましたが、私はfseekに問題がありました。 ありがとうございました:)

+0

だから私は言ったようにEOFを打つだけだった。 –

+0

@ZverevEugeneはい、どのように私は問題を解決マークですか? –

+0

投稿した回答を受け入れます。私は、あなたが回答を投稿してからそれを受け入れるまでの間にある程度の時間があると思います。 (IIRC:9分) – user3629249

関連する問題