2014-02-13 43 views
0

我試圖取消引用變量的結構是在列表中的一個結構變量,所以這裏是我的名單和struct取消引用從在C列表

struct packet { 
unsigned short block_num; 
unsigned short block_size; 
unsigned short crc; 
unsigned char *payload; 
}packet; 

/*功能和類型聲明*/

typedef struct List{ 
    struct packet *p; 
    struct List *next; 
}List; 

在這裏,我試圖做一個toString()包的列表:

char *tostring(List *h) { 
char *str= malloc(STRSIZE); 
char num[sizeof(List)*100]; 
str[0] = '\0'; 
while (h != NULL) { 
    sprintf(num, "package Number: %d \n", h->p->block_num); 
    sprintf(num, "block size: %d \n", h->p->block_size); 
    sprintf(num, "CRC: %d", h->p->crc); 
    strncat(str, num, STRSIZE - strlen(str) - 1); 
    h = h->next; 
} 
return str; 
} 

而且我打了segmentatio n故障,請幫忙,謝謝!因此,在C#中,我將使用list.ElementAt(i).block_num,它是如何在C中完成的?

編輯:新的,問題就出在

char *tostring(List *h) { 
char *str= malloc(STRSIZE); 
printf("line1"); 
char num[sizeof(List)*100]; 
char size[sizeof(List)*100]; 
char crcs[sizeof(List)*100]; 
char messages[sizeof(List)*100]; 
while (h != NULL) { 
    sprintf(num, "package Number: %d \n", h->p->block_num);  
    sprintf(size, "block size: %d \n", h->p->block_size);  
    sprintf(crcs, "CRC: %d", h->p->crc); 
    sprintf(messages, "CRC: %s", h->p->payload); 
    strncat(str,num,sizeof(num)); 
    strncat(str,size,sizeof(size)); 
    strncat(str,crcs,sizeof(crcs)); 
    strncat(str,messages,strlen(num)); 
    h = h->next; 

} 
return str; 
} 
+0

我會被提示字符NUM啓動[的sizeof(* H)]是不是大到足以容納字符串 「包號:XXXXX \ n」。 – NebulaSleuth

+0

增加'num'數組的大小,並在_every_'sprintf'之後使用strcpy。還要記住,根據列表的大小,str將是一個非常大的字符串。只是好奇,爲什麼你需要把所有東西都記憶成一串? – ssm

+0

這是一個任務,我們必須打包一個txt文件,把它們放在一個鏈表中,然後打印出鏈表 –

回答

1

是否使用sizeof(*h)確定數組List元素的數量我解除引用?

sizeof(*h)返回List的大小。由於tostring()只能得到指向List的指針,因此無法知道指向了多少個元素。

無論如何,看起來你正在向這個大小的字符數組寫一個字符串。 List的大小與數組中元素的數量有什麼關係?你想做什麼?

+0

也有連續覆蓋的緩衝區... – detly

+0

這個答案是一個真正的評論,因爲它不提供解決方案。 – NebulaSleuth

+0

我真誠地不知道該如何放置數組的大小,我習慣於在C#中使用LinkedList,現在C中的所有內容對我來說都非常困難。 –

0

有幾件事情,可以去錯在這裏

  1. 你SRTSIZE可能是低容納所有你開始追加到str中的文本。爲此,您現在可以從一個很大的緩衝區開始消除這種情況。

  2. 從以前的答案發布你總是覆蓋num。每次創建num之後,您應該寫入'str'

  3. strncat實現看起來不正確。你應該使用strlen(num)。

    strncat(str,num,strlen(num));

char * strncat(char * destination,const char * source,size_t num); 最後一個參數需要 要附加的最大字符數。

參考:http://www.cplusplus.com/reference/cstring/strncat/