24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 294  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 265求调剂 +12 林深温澜 2026-04-01 15/750 2026-04-02 19:14 by 一只好果子?
[考研] 312求调剂 +3 小小墨123 2026-04-02 4/200 2026-04-02 17:40 by 梨子~
[考研] 一志愿郑大材料工程290求调剂 +20 Youth_ 2026-03-30 20/1000 2026-04-02 14:48 by 5896
[考研] 学硕机械工程303求调剂 +4 无名所以叫吴明 2026-03-30 4/200 2026-04-02 14:06 by asdfzly
[考研] 一志愿北京理工大学本科211材料工程294求调剂 +8 mikasa的围巾 2026-03-28 9/450 2026-04-02 12:09 by ms629
[考研] 一志愿北交大材料工程总分358 +3 cs0106 2026-04-02 5/250 2026-04-02 11:37 by olim
[考研] 385分 生物学(071000)求调剂 +6 qf626 2026-04-01 6/300 2026-04-02 10:39 by guoweigw
[考研] 一志愿厦门大学化学工程(专硕)-数二英二406分-求调剂 +5 厦大化工 2026-04-01 5/250 2026-04-02 10:03 by jp9609
[考研] 08生物与医药专硕初试346找调剂 +6 dianeeee 2026-04-01 7/350 2026-04-02 08:23 by guoweigw
[考研] 材料调剂 +12 一样YWY 2026-04-01 12/600 2026-04-02 00:21 by 百秒光年
[考研] 285求调剂 +11 AZMK 2026-04-01 11/550 2026-04-01 22:40 by peike
[考研] 273求调剂 +19 李芷新1 2026-03-31 19/950 2026-04-01 21:49 by chyhaha
[考研] 332求调剂 +8 Lyy930824@ 2026-03-29 8/400 2026-04-01 18:40 by 千钧澄玉宇啊
[考研] 0856,材料与化工321分求调剂 +13 大馋小子 2026-03-27 14/700 2026-04-01 15:58 by yanflower7133
[考研] 一志愿郑大085600,310分求调剂 +6 李潇可 2026-03-26 6/300 2026-04-01 14:44 by chenqifeng666
[考研] 材料0856 英一数二 323 求调剂 +9 袁sy 2026-04-01 9/450 2026-04-01 14:30 by wangjy2002
[考研] 考研调剂求助 +7 13287130938 2026-03-31 7/350 2026-03-31 16:39 by 690616278
[考研] 263求调剂 +3 DDDDuu 2026-03-27 3/150 2026-03-31 16:21 by 土木硕士招生
[考研] 285求调剂 +6 AZMK 2026-03-29 9/450 2026-03-30 21:02 by dophin1985
[考研] 071010 323 分求调剂 +3 Baekzhy 2026-03-27 3/150 2026-03-30 14:24 by andresqi
信息提示
请填处理意见