#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를 할 때 헤더 필드에 너무 많은 데이터를 넣는 것 같습니다. 각 struct 멤버를 거쳐 데이터를 복사해야합니까? 저는 또한 C++을 사용하고 있습니다. 그러나 이것은 "C"전략에 더 가깝습니다. C++을위한 더 좋은 방법이 있습니까?구조체에 char 배열을 복사 할 때 memcpy가 작동하지 않는 이유는 무엇입니까?
char [3]에 '더 많은 데이터를 넣을 수 없습니다. 제로 종료가 아니기 때문에 너무 많이 읽을 수 있습니다. –
당신의'ID3v1.header'는 null로 끝나지 않았을 가능성이 큽니다. '\ 0'까지 모든 것을 인쇄하고 있습니다. – lapk
나는 당신의 버퍼와 버퍼의 이름을'buf'와'buffer'라고하지 말 것을 강력하게 제안합니다. 왜 하나의 이름을'buf'라고하고 다른 이름을'bufSize'라고하지 않습니까? 또는'buffer'와'bufferSize'? 이것은 혼란 스럽다! 또한, 복사하고자하는 모든 것이 ID3 태그이고 그 크기가'128'이라면,'128'을 상수로 대체하십시오 (예 :'ID3TAG_SIZE'). – hochl