循环遍历一系列结构

时间:2009-10-30 08:41:43

标签: c

我有这个结构,我认为如果结构指向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);
}

4 个答案:

答案 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,如数组初始化中那样)