函数find_young()
必须接收指针p
作为实际参数。
并且p
必须指出一个struct s
,其中有最年轻的人。
没有错误消息,但程序不起作用。
请给我一些建议。
typedef struct
{
char *name;
int age;
} PERSON;
void find_young(PERSON **ip)
{
PERSON s[3] = {{"John", 25}, {"Brandon", 28}, {"Alex", 30}};
int i;
int min = s[0].age;
for(i = 0; i < 3; i++)
{
if(min > s[i].age)
**ip = s[i];
}
}
int main()
{
PERSON *p;
find_young(&p);
printf("The youngest person is %s.\n", p->name);
}
答案 0 :(得分:2)
您需要在代码中进行一些更改才能使其正常工作
1)您需要为struct
和结构中的char* name
分配内存
int main()
{
PERSON *p = malloc(sizeof(PERSON));
p->name = malloc(100);
find_young(&p);
printf("The youngest person is %s with age %d.\n", p->name, p->age);
free(p->name);
free(p);
}
<小时/> 2)然后,您需要将
name
和age
值复制到正确传递的struct
void find_young(PERSON **ip)
{
PERSON s[3] = {{"John", 25}, {"Brandon", 28}, {"Alex", 30}};
int i;
int min = s[0].age; //copying the first value
(**ip).age = s[0].age;
strcpy((**ip).name, s[0].name);
for(i = 1; i < 3; i++) //starting from the next values to compare
{
if(min > s[i].age)
{
(**ip).age = s[i].age;
strcpy((**ip).name, s[i].name);
}
}
}
答案 1 :(得分:0)
在您的代码中,
git push origin master
传递给函数之前,p
&p
,在函数你需要分配内存。另外,你最终会取消引用无效指针,它会调用undefined behavior。