69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
typedef struct tagSTUDENT{
char *name;
int age;
}STUDENT;
typedef struct{
int a;
char b;
}mm;
STUDENT fun();
int main()
{
// STUDENT p=fun();
STUDENT p;
p=fun();
printf("p.age = %d\n",p.age);
printf("p.name = %s\n",p.name);
return 0;
}
STUDENT fun()
{
STUDENT stu;
mm mmt;
stu.age=18;
mmt.a = 23;
mmt.b = 'a';
stu.name = (char *)malloc(sizeof(mm));
memcpy(stu.name, (char *)&mmt, sizeof(mm));
return stu;
}
STUDENT fun()
{
STUDENT stu;
mm mmt;
stu.age=18;
mmt.a = 23;
mmt.b = 'a';
stu.name = (char *)malloc(sizeof(mm));
memset(&mmt, '\0', sizeof(mm)); // 由于内存对齐,在32位的操作系统上sizeof(mm)
// 应该是8,即4+1+3,最后3个字节是空的
// 这样memset一下就保证了字符串的结束符 '\0'
memcpy(stu.name, (char *)&mmt, sizeof(mm));
return stu;
}
STUDENT fun()
{
STUDENT stu;
mm mmt;
stu.age=18;
mmt.a = 23;
mmt.b = 'a';
stu.name = (char *)malloc(sizeof(mm));
memcpy(stu.name, (char *)&mmt, sizeof(mm));
return stu;//stu为一个局部变量,在该函数结束时,该变量的生命周期结束,会被释放掉
}
/***************修改结果,没测试***********************/
STUDENT* fun()
{
STUDENT *stu;
stu = (STUDENT *)malloc(sizeof(STUDENT));//动态分配一块内存,由于在堆上分配,不会随函数结束而终结。
mm mmt;
stu.age=18;
mmt.a = 23;
mmt.b = 'a';
stu.name = (char *)malloc(sizeof(mm));
memcpy(stu.name, (char *)&mmt, sizeof(mm));
return stu; //返回内存的指针,不过楼主要注意在主函数中将该内存释放掉 同时主函数p的类型也要做修改 STUDENT *P = NULL;
}