24小时热门版块排行榜    

查看: 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?
回复此楼
上善若水 虚怀若谷 宁静致远 淡泊明志
已阅   回复此楼   关注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的回帖
查看全部 3 个回答

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的回帖
信息提示
请填处理意见