qfedu-c-level/day12/d15.c

27 lines
737 B
C

// 结构体的成员是指针
// 如果结构体中的成员是指针时,可以直接赋值(常量区的地址)或者可以从堆区申请空间后赋值
#include <stdio.h>
#include <string.h>
struct Data1
{
int n;
char *name;
};
int main()
{
struct Data1 d1 = {1, "lucy"};
printf("%d %s\n", d1.n, d1.name);
struct Data1 d2;
d2.n = 100;
d2.name = (char *)malloc(32); // 申请堆区空间
// d2.name = "lucy"; // 导致内存泄漏,因为指针变量指向了常量区的地址,而不是堆区的地址
strcpy(d2.name, "lucy"); // 修改堆区的内容
printf("%d %s\n", d2.n, d2.name);
free(d2.name); // 释放堆区空间,否则会导致内存泄漏
return 0;
}