【发布时间】:2015-12-20 02:28:29
【问题描述】:
假设我有一个这样的结构:
struct Person {
int age;
char *name;
Person *next_ptr;
}
现在我有一个函数可以生成 2 个人并返回指向第一个结构的指针:
Person *GetPerson(){
char[5] p1name = "John";
char[4] p2name = "Bob";
struct Person *p1;
struct Person *p2;
p2 = malloc(sizeof(struct Person));
strcpy(p2.name, p2name);
p2->age = 25;
p1 = malloc(sizeof(struct Person));
strcpy(p1.name, p1name);
p1->age = 20;
p1->next_ptr = p2;
return p1;
}
以及提取这两个Person的函数的用法。
struct Person *person = malloc(sizeof(struct Person));
person = GetPerson();
int person1age = person.age; // Get age
char person1name[4] = person.name; // Get name
int *person2_ptr = person.next_ptr; // Extract the person 2 pointer
struct Person *person2 = malloc(sizeof(struct Person));
person2 = (*person2_ptr);
char person2name[4] = person2.name; // gets person 2 name
int person2age = person2; // get person 2 age
我希望我能清楚地说明我想要做什么。有人可以告诉我正确的实现方法吗?
【问题讨论】:
-
p1 是堆栈上的
struct Person。函数GetPerson被声明为返回一个Person *(推测Person 是struct Person 的typedef),它应该在堆上分配并返回。稍微阅读一下,您实际上是在分配 p1 和 p2,因此将它们调整为 struct Person *。还发布一个完整的程序,并准确说明什么不起作用以及为什么 -
在名称后用括号声明字符数组。还要确保为字符串上的空终止符留出空间!
char p1name[5] = "John" -
不
char p1name[5]要求 6 个字符,因为 0 索引? -
没有。它要求 5 个字节。
-
您没有为名称字符串分配空间。你没有办法返回第二个结构指针。