24小时热门版块排行榜    

查看: 373  |  回复: 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?
回复此楼
上善若水 虚怀若谷 宁静致远 淡泊明志
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baghnac

金虫 (小有名气)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +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"
Beagreathackernotacracker!
2楼2015-08-02 10:08:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baghnac

金虫 (小有名气)

【答案】应助回帖

★ ★
刘源416: 金币+2, ★有帮助 2015-08-03 07:09:54
引用回帖:
2楼: Originally posted by baghnac at 2015-08-02 10:08:47
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也指向同一 ...

struct stu {  
    char  *name, gender;
    int  score;
};
这个问题出现name是一个指针,用指针本身语言上没限制,但是如果要将这个结构体传输,比如从一个exe传到另一个exe,那就会出现严重问题,因为name的内存与stu的内存完全独立,不连续,导致传输后的数据不可用!

重新定义结构如下,即可解决
struct stu {  
    char name[10];
    char gender;
    int  score;
};

话说,就10个字节,还malloc
楼主是因为太关注内存浪费问题,还是???
Beagreathackernotacracker!
3楼2015-08-02 10:12:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 刘源416 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 ELBZ6WwEaRj6 2026-11-05 3/150 2026-11-05 21:05 by qL1cU46YIdK0
[考博] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 ELBZ6WwEaRj6 2026-11-05 3/150 2026-11-05 21:05 by qL1cU46YIdK0
[公派出国] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +4 ELBZ6WwEaRj6 2026-11-04 8/400 2026-11-05 20:54 by qL1cU46YIdK0
[基金申请] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +4 ELBZ6WwEaRj6 2026-11-04 8/400 2026-11-05 20:45 by qL1cU46YIdK0
[考研] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 ELBZ6WwEaRj6 2026-11-04 8/400 2026-11-05 20:43 by qL1cU46YIdK0
[硕博家园] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +4 ELBZ6WwEaRj6 2026-11-04 7/350 2026-11-05 20:43 by qL1cU46YIdK0
[硕博家园] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 ELBZ6WwEaRj6 2026-11-04 9/450 2026-11-05 20:34 by qL1cU46YIdK0
[公派出国] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +5 kvewwGtKktqB 2026-11-04 12/600 2026-11-05 20:21 by qL1cU46YIdK0
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 ttH3f1oA6ace 2026-11-04 8/400 2026-11-05 20:21 by qL1cU46YIdK0
[考博] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 ttH3f1oA6ace 2026-11-04 6/300 2026-11-05 18:00 by My20PsvIExYO
[考研] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 ttH3f1oA6ace 2026-11-04 11/550 2026-11-05 17:58 by My20PsvIExYO
[硕博家园] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +5 kvewwGtKktqB 2026-11-04 13/650 2026-11-05 17:47 by My20PsvIExYO
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 ncTVBM6AOJHF 2026-11-04 14/700 2026-11-05 17:36 by My20PsvIExYO
[考研] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +5 ncTVBM6AOJHF 2026-11-04 10/500 2026-11-05 17:36 by My20PsvIExYO
[硕博家园] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +4 ncTVBM6AOJHF 2026-11-04 9/450 2026-11-05 17:26 by My20PsvIExYO
[硕博家园] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 ncTVBM6AOJHF 2026-11-04 9/450 2026-11-05 17:25 by My20PsvIExYO
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +6 ncTVBM6AOJHF 2026-11-04 16/800 2026-11-05 17:25 by My20PsvIExYO
[考研] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +4 ncTVBM6AOJHF 2026-11-04 13/650 2026-11-05 17:15 by My20PsvIExYO
[公派出国] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 ncTVBM6AOJHF 2026-11-04 9/450 2026-11-05 15:13 by My20PsvIExYO
[硕博家园] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 ncTVBM6AOJHF 2026-11-04 10/500 2026-11-05 10:39 by PYZmcHr5kSaq
信息提示
请填处理意见