每次运行从文件中读取的整数都不同,为什么

Integer read from file different every run, why?

本文关键字:整数 为什么 读取 运行 文件      更新时间:2023-10-16
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;
  }

我只是输出大小之后,每次运行时它都会发生变化,我是不是在某个地方溢出了?

你应该检查你的假设,sizeof(ID3v2_header) == 10 .

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

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

memcpy(&head,buf,10);

这不起作用,因为head是内存格式,而buf是文件格式。您需要一些代码才能在这两种不同的格式之间进行转换。

相关文章: