首页 新闻 搜索 专区 学院

刚刚学习C,对指针的写法很迷糊,不同的写法导致程序能否运行下去

0
悬赏园豆:50 [已解决问题] 解决于 2021-02-05 10:02

这样的写法不能打印内容

换成这个就能打印了

这两种写法有什么区别吗?

进阶科技树的主页 进阶科技树 | 初学一级 | 园豆:74
提问于:2021-02-04 22:24

就是写结构体指针申请内存的时候,写法不同,导致程序能不能打印,但是不清楚有什么区别

柠檬太酸了 8个月前
< >
分享
最佳答案
1

struct teacher{
char* name;
int age;
} tec;
//64位程序,字节对齐后16个直接大小
cout << sizeof(tec) << "::" << sizeof(struct teacher) <<endl;

struct teacher* t = (struct teacher*)malloc(sizeof(tec));
t->name = (char*)malloc(sizeof(char)*5);
//如上分别申请结构和字符串的空间,字符串长度只要比“牛玲”长度+1,不发生缓冲溢出就没问题

printf("%p %p\n", t->name, t);
//这个可看地址的分配情况
strcpy(t->name, "牛玲");
t->age =19;
printf("%s %d\n", t->name, t->age);
free(t->name);
free(t);

fflush(stdout);

输出结果
16::16
0x55bdb8eaf050 0x55bdb8eaf030
牛玲 19

贴的图可见无论10还是20,字符串没有问题,整个过程是对的,问题不是发生在这里,可能是上下文其他地方不对了吧

收获园豆:50
2012 | 高人七级 |园豆:20907 | 2021-02-05 08:55

今天早上起来重启之后又好了

进阶科技树 | 园豆:74 (初学一级) | 2021-02-05 10:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册