struct ID3v2_header{
char tag[3];
char ver[2];
char flag;
int size;
};
ID3v2_header readID3v2_head(string file){
char buf[10];
ifstream infile(file.c_str(),ios::binary);
ID3v2_header head;
if(!infile || !infile.read(buf, 10)){
cout<<"FAIL"<<endl;
infile.close();
return head;
}
memcpy(&head,buf,10);
infile.close();
return head;
}
我只是输出后面的大小,每次运行时它都会改变,我在哪里溢出?
答案 0 :(得分:3)
您应该检查sizeof(ID3v2_header) == 10
。
然后,您应该手动填写结构的字段,而不是使用memcpy
。
答案 1 :(得分:0)
文件是字节流。在将数据写入文件之前,需要将其转换为具有已知格式的字节流。当您从文件中读回数据时,需要将该字节流的格式转换为内存中结构的格式。
memcpy(&head,buf,10);
这不起作用,因为head
采用内存格式,buf
采用文件格式。您需要一些代码来转换这两种不同的格式。