我有这个结构,我认为如果结构指向NULL值我可以设置条件。
以下是此示例的简单结构:
typedef struct
{
char *name;
char *data;
} details_t;
details_t emp_details [] =
{
{ "peter", "lawyer" },
{ "john", NULL }, /* No data for john */
{ NULL, NULL }, /* Indicates last element in the array */
};
我想我应该增加emp_details数组并取消引用指针,看它是否在第一个数组元素中包含NULL。但不确定我是否朝着正确的方向前进。
for(i=i; *emp_details; i++)
{
printf("Name: [ %s ] [ %s ]\n", emp_details[i].name, emp_details[i].data);
}
答案 0 :(得分:5)
你可以通过两种不同的方式处理这种外观,并且它们都有两种重叠方式!
我假设你想在'name'为NULL时停止。
for(details_t* it = emp_details; (*it).name != NULL; it++)
{ printf("..", (*it).name, (*it).data); }
或:
for(int i = 0; emp_details[i].name != NULL; i++)
{ printf("..", emp_details[i].name, emp_details[i].data); }
还有另外一种选择。最后你不能为NULL,并通过执行以下操作获得emp_details的大小:
int size_of_array = sizeof(emp_details)/sizeof(details_t);
但是,我个人会反对这一点,因为我发现它在实践中很脆弱。
答案 1 :(得分:3)
我建议:
for ( i=0 ; emp_details[i].name != NULL ; i++)
{
// do something
}
答案 2 :(得分:2)
应该是:
for(i=0; emp_details[i].name != NULL; i++) {
printf("Name: [ %s ] [ %s ]\n", emp_details[i].name, emp_details[i].data);
}
答案 3 :(得分:2)
您需要的是:
for(i=i; emp_details[i].name; i++)
{
printf("Name: [ %s ] [ %s ]\n", emp_details[i].name, emp_details[i].data);
}
(这假设允许emp_details[i].data
为NULL,如数组初始化中那样)