在不知道元素数量的情况下迭代准备好的结构数组 c 的正确简单声明
proper simple declatation to iterate prepared struct array c without knowing number of elements
我一直在寻找关于如何迭代包含混合类型数据字段的结构数组的问题,只是得到了复杂的答案。我正在寻找相当简单的东西。
我的程序从 linux IP 表中检索 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);
第一个片段经过 运行ning 测试没有问题。现在第二个片段给我带来了困难,因为我看不到数据的结果。
当我尝试通过以下方式迭代结构时:
while(p != '[=11=]'){
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 != '[=14=]')
应该是 while(p->IP)
)
我一直在寻找关于如何迭代包含混合类型数据字段的结构数组的问题,只是得到了复杂的答案。我正在寻找相当简单的东西。
我的程序从 linux IP 表中检索 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);
第一个片段经过 运行ning 测试没有问题。现在第二个片段给我带来了困难,因为我看不到数据的结果。
当我尝试通过以下方式迭代结构时:
while(p != '[=11=]'){
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 != '[=14=]')
应该是 while(p->IP)
)