2014-02-14 22 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

請貼上社區可以理解的可編譯代碼;沒有人知道你的代碼是如何佈局的,但是你和缺少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 

那麼的malloc那麼多

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) ;