gpt4 book ai didi

c - 在不知道元素数量的情况下迭代准备好的结构体数组 c 的正确简单声明

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

我一直在研究有关如何迭代包含混合类型数据字段的结构数组的问题,但结果却很复杂。我正在寻找一些相当简单的东西。

我的程序从 Linux IPtables 检索 IP 地址以及它们是否被接受或拒绝的状态。程序的第一个片段如下:

iptstat* ips=malloc(100000);
memset(ips,0,99999);
// custom function is called here that properly fills up iptstat structure with data.
iptstat* p=ips;int sz=sizeof(iptstat);

运行测试后第一个片段没有问题。现在第二个片段给我带来了困难,因为我无法看到数据的结果。

当我尝试通过以下方式迭代结构时:

while(p != '\0'){
printf("IP %s stat %d\n",p->IP,p->stat);
p+=sz;
}

我在屏幕上收到:

IP  stat 0
IP stat 0
IP stat 0
...
IP stat 0
Segmentation fault

我预计只有两个条目以以下形式显示:

IP xxx.xxx.xxx.xxx stat x 

其中 xxx.xxx.xxx.xxx 是实际 IP 地址,x 是 1 或 2。

然后,我继续将代码的问题片段更改为此,希望我可以运行循环,直到看到空指针:

while(*p){
printf("IP %s stat %d\n",p->IP,p->stat);
p+=sz;
}

编译器报告:

./test.c: In function 'main':
./test.c:78: error: used struct type value where scalar is required

第 78 行是我正在努力解决的 while 循环。

对此有一个简单的答案吗,还是我必须采用一个涉及 for 循环的相当复杂的答案?

最佳答案

使用p+=sz;,您可以使用sz*sizeof(iptstat))增加p。您应该只编写 p++;,因为编译器知道 iptstat 的大小。

(另请参阅 Joachim 的评论,while(p != '\0') 应该是 while(p->IP))

关于c - 在不知道元素数量的情况下迭代准备好的结构体数组 c 的正确简单声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220608/

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