适当的简单声明,在不知道元素数量

时间:2015-05-13 16:36:17

标签: c arrays loops struct iteration

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

我的程序从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循环的相当复杂的答案?

1 个答案:

答案 0 :(得分:0)

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

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