每次运行时整数从文件中读取,为什么?

时间:2012-03-18 21:11:30

标签: c++ file-io id3

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;

  }

我只是输出后面的大小,每次运行时它都会改变,我在哪里溢出?

2 个答案:

答案 0 :(得分:3)

您应该检查sizeof(ID3v2_header) == 10

的假设

然后,您应该手动填写结构的字段,而不是使用memcpy

答案 1 :(得分:0)

文件是字节流。在将数据写入文件之前,需要将其转换为具有已知格式的字节流。当您从文件中读回数据时,需要将该字节流的格式转换为内存中结构的格式。

memcpy(&head,buf,10);

这不起作用,因为head采用内存格式,buf采用文件格式。您需要一些代码来转换这两种不同的格式。