代码:
struct T_Name
{
char *First;
char *Middle;
char *Last;
};
struct T_FullName
{
char *Title;
struct T_Name Name;
char *Suffix;
};
struct T_Person
{
struct T_FullName *FullName;
int Age;
char Sex;
struct T_Person *BestFriend;
};
typedef struct T_Person *ptrPerson;
ptrPerson pFriend[10];
struct T_Person Person[10];
我怎样才能编写necesarry代码来动态分配内存来存储pFriend [2]中的值[>]> FullName-> Name.First?
答案 0 :(得分:0)
假设您知道要存储的名字的长度,
// Allocate memory for FullName.
Person[2].FullName = malloc(sizeof(T_FullName);
// Allocate memory for the first name.
Person[2].FullName->Name.First = malloc(FIRSTNAME_LENGTH);
答案 1 :(得分:0)
您的 pFriend 是指针变量,因此您必须先为指针变量分配内存。然后再次分配内存后,您的 FullName 是指针类型,因此我们需要为其分配内存,最后 FullName 中的名称成员是不是指针类型,因此您可以使用名称中的第一个和。运算符为其分配内存。
//Allocate space for T_Person
pFriend[2] = malloc(sizeof(T_Person);
//Allocate space for FullName
pFriend[2]->FullName = malloc(sizeof(T_FullName);
//Allocate space for First Name
pFriend[2]->FullName->Name.First = malloc(sizeof(urstringlength));
答案 2 :(得分:0)
pFriend[2] = malloc( sizeof *pFriend[2] );
pFriend[2]->FullName = malloc( sizeof *pFriend[2]->FullName );
pFriend[2]->FullName->First = malloc( strlen(the_name) + 1 );
strcpy(pFriend[2]->FullName->First, the_name);
请注意,您可能实际上并不想这样做,很难使用这种混乱的结构。您至少应该将未使用的指针设置为NULL,以便您的其他代码可以告诉哪些指针指向已分配的内存,哪些指针不指向。
此外,此示例中未使用Person
。如果您希望pFriend[i]
指向Person[i]
,则必须表明明确;用以下代码替换我的第一行:
pFriend[2] = &Person[2];