#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MaxLen 1000
typedef struct
{
int age;
char * name;
} student;
typedef enum Result {aged,named,success} Result;
Result res = success;
student ** myFunc()
{
student
** ans
= (student
**)malloc(sizeof(student
*)); int numStudents = 0, currentAge, flag = 1;
student * std;
while (flag)
{
std
= (student
*)malloc(sizeof(student
)); std
->name
= (char *) malloc(sizeof(char) * MaxLen
); if (strcmp(std
->name
,"enough") != 0) {
scanf("%d", ¤tAge
); if (currentAge >= 0)
{
std->age = currentAge;
numStudents++;
ans
= (student
**) realloc(ans
, sizeof(student
*) * numStudents
); ans[numStudents-1] = std;
}
else
{
res = aged;
break;
}
}
else
{
res = named;
break;
}
}
if (numStudents == 0)
{
return NULL;
}
return ans;
}
int main(void) {
student ** arr = myFunc();
if (res == aged)
{
printf("I stopped because of age\n"); }
else if (res == named)
{
printf("I stopped because of names\n"); }
else
{
printf("I stopped becuase of allocation failure\n"); }
int num, i;
student * std;
num = sizeof(arr)/sizeof(student *);
for (i=0;i<num;i++)
{
std = arr[i];
printf("Student %s is of age %d", std
->name
, std
->age
); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgojZGVmaW5lIE1heExlbiAxMDAwCnR5cGVkZWYgc3RydWN0CnsKCWludCBhZ2U7CgljaGFyICogbmFtZTsKfSBzdHVkZW50OwoKdHlwZWRlZiBlbnVtIFJlc3VsdCB7YWdlZCxuYW1lZCxzdWNjZXNzfSBSZXN1bHQ7ClJlc3VsdCByZXMgPSBzdWNjZXNzOwpzdHVkZW50ICoqIG15RnVuYygpCnsKCXN0dWRlbnQgKiogYW5zID0gKHN0dWRlbnQgKiopbWFsbG9jKHNpemVvZihzdHVkZW50ICopKTsKCWludCBudW1TdHVkZW50cyA9IDAsIGN1cnJlbnRBZ2UsIGZsYWcgPSAxOwoJc3R1ZGVudCAqIHN0ZDsKCXdoaWxlIChmbGFnKQoJewoJCXN0ZCA9IChzdHVkZW50ICopbWFsbG9jKHNpemVvZihzdHVkZW50KSk7CgkJc3RkLT5uYW1lID0gKGNoYXIgKikgbWFsbG9jKHNpemVvZihjaGFyKSAqIE1heExlbik7CgkJc2NhbmYoIiVzIiwgc3RkLT5uYW1lKTsKCQlpZiAoc3RyY21wKHN0ZC0+bmFtZSwiZW5vdWdoIikgIT0gMCkKCQl7CgkJCXNjYW5mKCIlZCIsICZjdXJyZW50QWdlKTsKCQkJaWYgKGN1cnJlbnRBZ2UgPj0gMCkKCQkJewoJCQkJc3RkLT5hZ2UgPSBjdXJyZW50QWdlOwoJCQkJbnVtU3R1ZGVudHMrKzsKCQkJCWFucyA9IChzdHVkZW50ICoqKSByZWFsbG9jKGFucywgc2l6ZW9mKHN0dWRlbnQqKSAqIG51bVN0dWRlbnRzKTsKCQkJCWFuc1tudW1TdHVkZW50cy0xXSA9IHN0ZDsKCQkJfQoJCQllbHNlIAoJCQl7CgkJCQlyZXMgPSBhZ2VkOwoJCQkJZnJlZShzdGQtPm5hbWUpOwoJCQkJZnJlZShzdGQpOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJcmVzID0gbmFtZWQ7CgkJCWZyZWUoc3RkLT5uYW1lKTsKCQkJZnJlZShzdGQpOwoJCQlicmVhazsKCQl9Cgl9CgkKCWlmIChudW1TdHVkZW50cyA9PSAwKQoJewoJCWZyZWUoYW5zKTsKCQlyZXR1cm4gTlVMTDsKCX0KCXJldHVybiBhbnM7Cn0KaW50IG1haW4odm9pZCkgewoJc3R1ZGVudCAqKiBhcnIgPSBteUZ1bmMoKTsKCWlmIChyZXMgPT0gYWdlZCkKCXsKCQlwcmludGYoIkkgc3RvcHBlZCBiZWNhdXNlIG9mIGFnZVxuIik7Cgl9CgllbHNlIGlmIChyZXMgPT0gbmFtZWQpCgl7CgkJcHJpbnRmKCJJIHN0b3BwZWQgYmVjYXVzZSBvZiBuYW1lc1xuIik7Cgl9CgllbHNlCgl7CgkJcHJpbnRmKCJJIHN0b3BwZWQgYmVjdWFzZSBvZiBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwoJfQoJaW50IG51bSwgaTsKCXN0dWRlbnQgKiBzdGQ7CgludW0gPSBzaXplb2YoYXJyKS9zaXplb2Yoc3R1ZGVudCAqKTsKCWZvciAoaT0wO2k8bnVtO2krKykKCXsKCQlzdGQgPSBhcnJbaV07CgkJcHJpbnRmKCJTdHVkZW50ICVzIGlzIG9mIGFnZSAlZCIsIHN0ZC0+bmFtZSwgc3RkLT5hZ2UpOwoJfQoJcmV0dXJuIDA7Cn0K