#define buffer 128
int main(){
char buf[buffer]="";
ifstream infile("/home/kevin/Music/test.mp3",ios::binary);
infile.seekg(-buffer,ios::end);
if(!infile || !infile.read(buf,buffer)){
cout<<"fail!"<<endl;
}
ID3v1 id3;
cout<<sizeof(id3)<<endl;
memcpy(&id3,buf,128);
cout<<id3.header<<endl;
}
struct ID3v1{
char header[3];
char title[30];
char artist[30];
char album[30];
char year[4];
char comment[28];
bool zerobyte;
bool track;
bool genre;
};
memcpyを実行すると、あまりにも多くのデータをヘッダーフィールドにプッシュしているようです。構造体メンバのそれぞれを通過し、データをコピーする必要がありますか?私もC++を使っていますが、これはもっと "C"戦略のようです。 C++の方がいいですか?char配列を構造体にコピーするときにmemcpyが機能しないのはなぜですか?
char [3]に「より多くのデータをプッシュする」ことはできません。ゼロ終了していないため、あまりにも多くのデータを読み取ることはできません。 –
あなたの 'ID3v1.header'は、おそらくヌルで終了しないでしょう。 '\ 0'まですべてを印刷しています。 – lapk
バッファとバッファサイズに 'buf'と' buffer'という名前を付けないことを強くお勧めします。 'buf'と' bufSize'という名前を付けてみませんか?あるいは 'buffer'と' bufferSize'ですか?これは混乱しています!さらに、コピーしたいものがすべてID3タグで、そのサイズが '128'の場合は、' ID3TAG_SIZE'などの意味のある名前ですべての '128'を定数で置き換えます。 – hochl