我試圖取消引用變量的結構是在列表中的一個結構變量,所以這裏是我的名單和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;
}
我會被提示字符NUM啓動[的sizeof(* H)]是不是大到足以容納字符串 「包號:XXXXX \ n」。 – NebulaSleuth
增加'num'數組的大小,並在_every_'sprintf'之後使用strcpy。還要記住,根據列表的大小,str將是一個非常大的字符串。只是好奇,爲什麼你需要把所有東西都記憶成一串? – ssm
這是一個任務,我們必須打包一個txt文件,把它們放在一個鏈表中,然後打印出鏈表 –