免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3689 | 回复: 15
打印 上一主题 下一主题

[C] 说段错误 错在哪里啊 帮帮忙了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-13 13:32 |只看该作者 |倒序浏览
#include<stdio.h>
#include<stdlib.h>
typedef struct list
{int age;
char name[20];
int id;
struct list* next;
}list;
void print_list(list* head)
{
while(head)
{
printf(“age=%d name=%s id=%d\n”,head->age,head->name,head->id);
head=head->next;}

}
void insert_order(list*head,int myage,char myname[],int myid)
{
List* newnode=(list*)malloc(sizeof(list));
newnode->age=myage;
newnode->id=myid;
strcpy(newnode->name,myname);
while(head->next&&head->next->id<myid)
head=head->next;
newnode->next=head->next;
head->next=newnode;
}
Int main(int argc,char**argv)
{  list*head=(list*)malloc(sizeof(list));
Head->next=NULL;
Head->id=-1;
Int id,age;
Char name[20];
Int i=0;
for(i=0;i<10;i++)
{
// Scanf(“%d %s %d”,&age,&name,&id);
age=random()%5+20;
id=random()%100;
Insert_order(head,age,name,id);
}
Print_list(head);
return 0;
}
说段错误  错在哪里啊  帮帮忙了

论坛徽章:
0
2 [报告]
发表于 2011-10-13 13:52 |只看该作者
本帖最后由 x5miao 于 2011-10-13 22:13 编辑

while(head->next&&head->next->id<myid)
head=head->next;
newnode->next=head->next;
head->next=newnode;


程序完全在乱写,既然是普通节点怎么能叫head

论坛徽章:
0
3 [报告]
发表于 2011-10-13 14:11 |只看该作者
可是老师上课是这么说的啊  运行也可以通过的

论坛徽章:
0
4 [报告]
发表于 2011-10-13 14:12 |只看该作者
回复 2# x5miao


    老师上课室这么写的 运行也可以通过

论坛徽章:
0
5 [报告]
发表于 2011-10-13 21:58 |只看该作者
本帖最后由 x5miao 于 2011-10-13 22:15 编辑

回复 4# wyx880327


   你们老师也在大小写乱写??教你们字符数组不赋值就输出?教你们可以随意缩进?

论坛徽章:
0
6 [报告]
发表于 2011-10-13 22:26 |只看该作者
回复  wyx880327


   你们老师也在大小写乱写??教你们字符数组不赋值就输出?教你们可以随意缩进?
x5miao 发表于 2011-10-13 09:58 PM



    这个事情在瓷之國不稀奇。  都能说Vxworks是Linux的叫兽 何奇不有呢

论坛徽章:
0
7 [报告]
发表于 2011-10-13 23:54 |只看该作者
void insert_order(list*head,int myage,char myname[],int myid)
这个函数有很大的问题,建议要返回char *.

论坛徽章:
0
8 [报告]
发表于 2011-10-13 23:59 |只看该作者
本帖最后由 caijicheng2006 于 2011-10-14 00:01 编辑

char *insert_order(list *head, int myage, char myname[], int myid)
{
        list *tmp = head;
        list *newnode=(list*)malloc(sizeof(list));
        newnode->age=myage;
        newnode->id=myid;
        strcpy(newnode->name,myname);
        while(tmp->next != NULL)
                tmp=tmp->next;
         newnode->next = NULL;
         tmp->next=newnode;
      
          return head;
}

论坛徽章:
0
9 [报告]
发表于 2011-10-14 12:51 |只看该作者
本帖最后由 x5miao 于 2011-10-14 13:06 编辑
char *insert_order(list *head, int myage, char myname[], int myid)
{
        list *tmp = head;
   ...
caijicheng2006 发表于 2011-10-13 23:59



    至少在strcpy()之前判断一下源的有效性吧。

  1. if(strlen(myname)<20)
  2.       strcpy(newnode->name,myname);
  3. else
  4.    return NULL;
复制代码
能直接调用strncpy()更好,但VS好像不支持

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
10 [报告]
发表于 2011-10-14 15:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP