我一直在研究如何迭代包含混合类型的数据字段的结构数组的问题,但只有复杂的答案。我正在寻找一些相当简单的东西。
我的程序从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循环的相当复杂的答案?
答案 0 :(得分:0)
使用p+=sz;
,您可以使用sz*sizeof(iptstat))
增加p。您应该只编写p++;
,因为编译器知道iptstat
的大小。
(另请参阅Joachim的评论,while(p != '\0')
应为while(p->IP)
)