| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 788 人关注过本帖, 1 人收藏
标题:很简单的结构体程序,麻烦看看这个程序错在哪
只看楼主 加入收藏
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
结帖率:77.78%
收藏(1)
已结贴  问题点数:5 回复次数:12 
很简单的结构体程序,麻烦看看这个程序错在哪
很久没有写c的程序了,拿个结构体来练练手 没想到编译虽然通过 但是执行报错:Segmentation fault

[view@localhost c]$cat s.c
#include<stdio.h>
typedef struct man{
        char *name;
        int age;
        char phone[12];
        }* pMAN;

int main(){
pMAN a;
strcpy(a->name,"hwt");
a->age=34;
strcpy(a->phone,"18677151934");
printf("a man named %s's age is %s,and phone is %s\n",a->name,a->age,a->phone);
exit(0);
}
[view@localhost c]$cc -o s s.c
[view@localhost c]$./s
Segmentation fault
搜索更多相关主题的帖子: 结构体 
2011-04-21 23:45
zjl01223
Rank: 2
等 级:论坛游民
帖 子:42
专家分:90
注 册:2011-4-21
收藏
得分:0 
新手
2011-04-21 23:52
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
printf("a man named %s's age is %d,and phone is %s\n",a->name,a->age,a->phone);

这里改了,不过结果还是一样的报错。
2011-04-21 23:54
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
程序代码:
#include<stdio.h>
#include <string.h>
#include <malloc.h>

typedef struct man{
        char *name;
        int age;
        char phone[12];
        }* pMAN;

int main(){
pMAN a = (pMAN) malloc(sizeof(struct man));
a->name = (char *) malloc(10);    // 你不给人家分配空间,人家往哪里 strcpy ?
strcpy(a->name,"hwt");
a->age=34;
strcpy(a->phone,"18677151934");
printf("a man named %s's age is %d,and phone is %s\n",a->name,a->age,a->phone);    // a->age 是 int, 用 %d
//exit(0);    // 这个不好,会让你看不到输出,除非你在退出前 fflush(stdout);
return 0;
}


[ 本帖最后由 voidx 于 2011-4-22 00:06 编辑 ]
2011-04-21 23:57
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
自己改好了:
[view@localhost c]$cat s.c
#include<stdio.h>
typedef struct man{
        char name[10];
        int age;
        char phone[12];
        }* pMAN;

int main(){
pMAN a=(pMAN)malloc(sizeof(pMAN));
strcpy(a->name,"hwt");
a->age=34;
strcpy(a->phone,"18677151934");
printf("a man named %s's age is %d,and phone is %s\n",a->name,a->age,a->phone);
exit(0);
}
[view@localhost c]$cc -o s s.c
[view@localhost c]$./s
a man named hwt's age is 34,and phone is 18677151934
2011-04-22 00:03
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
谢谢楼上的,那个char *name我改成name[10]才通过
2011-04-22 00:09
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 5楼 khaz
pMAN a=(pMAN)malloc(sizeof(pMAN));    // 这个还是错的,而且要给 name 也分配空间,不然你定义个数组试试,肯定乱套
2011-04-22 00:09
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
exit(0)没事的。我试过了。
2011-04-22 00:10
khaz
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:130
专家分:188
注 册:2011-4-21
收藏
得分:0 
以下是引用voidx在2011-4-22 00:09:54的发言:

pMAN a=(pMAN)malloc(sizeof(pMAN));    // 这个还是错的,而且要给 name 也分配空间,不然你定义个数组试试,肯定乱套
这里声明已经改成name[10]了
2011-04-22 00:11
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:3 
你 printf("%d %d", sizeof(pMAN), sizeof(struct man)); 看一下就明白了,sizeof(struct man) 比 sizeof(pMAN) 大多了。
也就是说 pMAN a=(pMAN)malloc(sizeof(pMAN)); 分配的内存不够用。
之定义一个变量的时候没关系,但是如果你定义两个变量就不一样了。
你可以试一下下面的代码,跟你的代码完全一样,只是改成了两个变量

程序代码:
#include<stdio.h>
typedef struct man{
        char name[10];
        int age;
        char phone[12];
}* pMAN;

int main(){
    pMAN a=(pMAN)malloc(sizeof(pMAN)), b = (pMAN)malloc(sizeof(pMAN));
    strcpy(a->name,"hwt");
    a->age=34;
    strcpy(a->phone,"18677151934");strcpy(a->name,"hwt");
    strcpy(b->name,"hwt");
    b->age=34;
    strcpy(b->phone,"18677151934");
    printf("a man named %s's age is %d,and phone is %s\n",a->name,a->age,a->phone);
    printf("a man named %s's age is %d,and phone is %s\n",b->name,b->age,b->phone);
    exit(0);
}
2011-04-22 00:24
快速回复:很简单的结构体程序,麻烦看看这个程序错在哪
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028572 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved