2014-02-14 2 views
0

Я пытаюсь прочитать заголовок пакета, а затем прочитать полезную нагрузку. Но как-то чтение полезной нагрузки просто не работает для меня. Любая помощь будет большой. Благодарю.Чтение структуры

FILE *inputfile 

struct packet { 
    unsigned short blocksize; 
    unsigned char *payload; 
}; 

while(!feof(inputfile)) { 
    struct packet p; 
    p.payload = malloc(p.blocksize); 

    fread(&p, sizeof(p), 1, infp); //reads the header 
    fread(p.payload, sizeof(char), p.blocksize, inputfile); //reads the payload 
} 
+3

что компилируемый код ?? (в нем отсутствуют некоторые скобки) – txtechhelp

+0

скобки находятся в моем коде, оставил его, когда я копировал/вставлял в это. и нет, это не мой полный код. – user3291818

+1

Пожалуйста, вставьте компилируемый код, который сообщество может понять; ни один орган не знает, как выкладывается ваш код, но вы и упущение даже одного кронштейна могут означать утечку памяти, ошибку seg или любые другие многочисленные ошибки. – txtechhelp

ответ

0

Вот несколько вещей:

  • вам не хватает закрывающей скобки для struct заявления.
  • Вы malloc(), зная, какой размер блока. Вы должны прочитать размер блока из файла перед вызовом malloc()
1

Первый

fread(&p, sizeof(p), 1, infp); //reads the header 

должно быть что-то

fread(&p.blocksize, sizeof(short), 1, infp); //reads the header size 

затем таНос что много

p.payload = malloc(p.blocksize); 

затем прочитать его полезной нагрузки

fread(p.payload, sizeof(char), p.blocksize, inputfile); //reads the payload 
0
while(!feof(inputfile)) { 
    struct packet p; 

    fread(&p.blocksize, sizeof(short), 1, infp); //Now you got the blocksize 

    p.payload = malloc(p.blocksize); // Allocate memory based on blocksize 
    if(p.payload == NULL) return -1 ; // Error...could not allocate mem 

    fread(p.payload, sizeof(char), p.blocksize, inputfile); //reads the payload 
} 

После всего, убедитесь, что вы сделали free(p.payload) ;

Смежные вопросы