Целочисленное чтение из файла отличается при каждом запуске, почему? - PullRequest
0 голосов
/ 19 марта 2012
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 ]

3 голосов
/ 19 марта 2012

Вам следует проверить ваше предположение, что sizeof(ID3v2_header) == 10.

Затем вам следует заполнить поля структуры вручную, а не с помощью memcpy.

0 голосов
/ 19 марта 2012

Файл - это поток байтов.Прежде чем записывать данные в файл, вам необходимо преобразовать его в поток байтов с известным форматом.Когда вы читаете эти данные обратно из файла, вам необходимо преобразовать из формата этого потока байтов в формат ваших структур в памяти.

memcpy(&head,buf,10);

Это не работает, потому что headв формате памяти и buf в формате файла.Вам нужен код для преобразования между этими двумя разными форматами.

...