我有这个结构,我认为如果结构指向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)
有两种不同的方法可以处理这种外观,你有两种方式重叠它们!
我假设你想在'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)
但是,我个人会反对这一点,因为我发现它在实践中很脆弱.