gpt4 book ai didi

c - 从 C 中的列表中取消引用结构中的变量

转载 作者:行者123 更新时间:2023-11-30 15:38:25 25 4
gpt4 key购买 nike

我试图取消引用列表中的结构中的变量,所以这是我的列表和结构

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

我遇到了段错误,请帮忙,谢谢!

那么,在 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;
}

最佳答案

您是否使用 sizeof(*h) 来确定数组中 List 元素的数量?

sizeof(*h) 返回List 的大小。由于tostring()仅获取指向List的指针,因此它无法知道指向了多少个元素。

无论如何,您似乎正在将一个字符串写入此大小的字符数组。 List 的大小与数组中元素的数量有什么关系?你想做什么?

关于c - 从 C 中的列表中取消引用结构中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21742853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com