| 查看: 271 | 回复: 2 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
刘源416木虫 (正式写手)
至尊
|
[求助]
一道不懂得C语言题目已有1人参与
|
||
|
#include <stdio.h> #include <stdlib.h> #include <string.h> struct stu { char *name, gender; int score; }; main() { struct stu a={NULL, 'm', 290}, b; a.name=(char *)malloc(10); strcpy(a.name, "Zhao" ;b = a; b.gender = 'f'; b.score = 350; strcpy(b.name, "Qian" ;printf( "%s,%c,%d,", a.name, a.gender, a.score ); printf( "%s,%c,%d\n", b.name, b.gender, b.score ); } 为什么a.name会被修改为Qian? |
» 猜你喜欢
职称评审没过,求安慰
已经有21人回复
垃圾破二本职称评审标准
已经有15人回复
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有20人回复
EST投稿状态问题
已经有7人回复
谈谈两天一夜的“延安行”
已经有15人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
聘U V热熔胶研究人员
已经有10人回复
求助文献
已经有3人回复
投稿返修后收到这样的回复,还有希望吗
已经有8人回复
三无产品还有机会吗
已经有6人回复

baghnac
金虫 (小有名气)
- 应助: 14 (小学生)
- 金币: 1706.4
- 红花: 6
- 帖子: 177
- 在线: 44小时
- 虫号: 1365578
- 注册: 2011-08-11
- 性别: GG
- 专业: 宇宙学
【答案】应助回帖
★ ★
刘源416: 金币+2, ★有帮助 2015-08-03 07:09:54
刘源416: 金币+2, ★有帮助 2015-08-03 07:09:54
|
struct stu { char *name, gender; int score; }; 这个问题出现name是一个指针,用指针本身语言上没限制,但是如果要将这个结构体传输,比如从一个exe传到另一个exe,那就会出现严重问题,因为name的内存与stu的内存完全独立,不连续,导致传输后的数据不可用! 重新定义结构如下,即可解决 struct stu { char name[10]; char gender; int score; }; 话说,就10个字节,还malloc 楼主是因为太关注内存浪费问题,还是??? |

3楼2015-08-02 10:12:42
baghnac
金虫 (小有名气)
- 应助: 14 (小学生)
- 金币: 1706.4
- 红花: 6
- 帖子: 177
- 在线: 44小时
- 虫号: 1365578
- 注册: 2011-08-11
- 性别: GG
- 专业: 宇宙学
【答案】应助回帖
★ ★ ★
感谢参与,应助指数 +1
刘源416: 金币+3, ★有帮助 2015-08-03 07:08:50
感谢参与,应助指数 +1
刘源416: 金币+3, ★有帮助 2015-08-03 07:08:50
|
b = a; 这句不是很标准的C语言 有点像是C++的潜拷贝 效果为 b.name = a.name; b.gender = a.gender; b.score = a.score; 由于a.name 是一个指向malloc得到的地址,而b.name=a.name 这意味着b.name也指向同一地址 当你用strcpy(b.name, "Qian")修改b.name时,就会修改b.name指向的地址,由于a.name同时也指向同一地址,所以最后a.name也是"Qian" |

2楼2015-08-02 10:08:47













;
回复此楼