概述
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAMEMAX 1024//设计一个最大值
typedef struct student_st
{
int id;
char *name; //定义一个指针用来接收malloc函数返回的内存地址
float math,chinese;
}STU,*STUP; //定义一个struct student_st类型的结构体变量名称,和一个结构体指针
int stu_input(STU *p) //把结构体的首地址传递过来
{
char name[NAMEMAX];
printf("Please enter for stu:");
scanf("%d%s%f%f",&p->id,name,&p->math,&p->chinese);
if(strlen(name) >= NAMEMAX)//输入的长度值如果超过最大值就结束
return -1;
p->name = malloc(strlen(name)+1);//申请一个刚才输入的name的大小并且加上结束字符(+1)这个字节,把指针返回给
if(p->name == NULL) //申请内存失败就退出
return -2;
strcpy(p->name,name);
return 0;
}
void stu_display(STU *p)
{
printf("%d %s %f %fn",p->id,p->name,p->math,p->chinese);
}
int stu_changename(STU *p)
{
char newname[NAMEMAX];
printf("Please enter the newname:");
scanf("%s",newname);
if(strlen(newname) >= NAMEMAX)//如果新输入的名字长度大于最大长度就退出
return -1;
free(p->name); //释放指针P的内存
p->name = malloc(strlen(newname)+1);
if(p->name == NULL)
return -2;
strcpy(p->name,newname);
return 0;
}
void menu(void)
{
printf("nn");
printf("--------MENU--------n");
printf("1 input datan");
printf("2 display datan");printf("3 changname datan");
printf("n");
}
int stu_init(STU *p)
{
p->id = 0;
p->math = 0;
p->chinese = 0;
p->name = malloc(1);
if(p->name == NULL)
return -1;
p->name[0] = '