循环遍历一系列结构

ant*_*009 1 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 */
};
Run Code Online (Sandbox Code Playgroud)

我想我应该增加emp_details数组并取消引用指针,看它是否在第一个数组元素中包含NULL.但不确定我是否朝着正确的方向前进.

for(i=i; *emp_details; i++)
{
    printf("Name: [ %s ] [ %s ]\n", emp_details[i].name, emp_details[i].data);
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*son 5

有两种不同的方法可以处理这种外观,你有两种方式重叠它们!

我假设你想在'name'为NULL时停止.

for(details_t* it = emp_details; (*it).name != NULL; it++)
  { printf("..", (*it).name, (*it).data); }
Run Code Online (Sandbox Code Playgroud)

要么:

for(int i = 0; emp_details[i].name != NULL; i++)
  { printf("..", emp_details[i].name, emp_details[i].data); }
Run Code Online (Sandbox Code Playgroud)

还有另一种选择.最后你不能为NULL,并通过执行以下操作来获取emp_details的大小:

int size_of_array = sizeof(emp_details)/sizeof(details_t);
Run Code Online (Sandbox Code Playgroud)

但是,我个人会反对这一点,因为我发现它在实践中很脆弱.

  • 我建议使用` - >`而不是`(*).`? (3认同)