我是靠谱客的博主 无私耳机,最近开发中收集的这篇文章主要介绍C语言动态内存的使用与函数结构体的联合使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#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] = '';
return 0;
}

void stu_destroy(STU *p)
{
free(p->name);
}

int main()
{
STU stu;
int choice;

stu_init(&stu);
/*if error*/

do
{
menu();
printf("Please choice(q for quit):");
if(scanf("%d",&choice) != 1)
break;
switch(choice)
{
case 1:
stu_input(&stu);
break;
case 2:
stu_display(&stu);
break;
case 3:
stu_changename(&stu);
break;
default:
printf("Unknow choice.n");
continue;
}

}while(1);

stu_destroy(&stu);

exit(0);
}

最后

以上就是无私耳机为你收集整理的C语言动态内存的使用与函数结构体的联合使用的全部内容,希望文章能够帮你解决C语言动态内存的使用与函数结构体的联合使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部