C语言如何动态分配存储空间

谁能够给我C语言动态分配存储空间的程序,谢谢!... 谁能够给我C语言动态分配存储空间的程序,谢谢! 展开
 我来答
cwc_2009
2009-04-27 · TA获得超过304个赞
知道小有建树答主
回答量:173
采纳率:100%
帮助的人:172万
展开全部
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
/* 工程功能:简单学生管理系统,
包含插入,删除,修改操作,采用链表数据模型
*/
typedef struct student{
int Num;//学号
char name[12];//姓名
int age;//年龄
struct student* pNext;//指向下一条记录的指针
}STUDENT,*PSTUDENT;
#define LEN sizeof(STUDENT)
PSTUDENT pHeader,pNail;//头结点指针,尾结点指针
int n=0;//学生信息条数
void PrintMenu();//打印操作菜单
bool ExistStudent(int Num);//是否存在学号为Num的学生信息,有则返回true,否则,false
void InsertInfo();//插入学生信息到末尾
bool DeleteInfo(int Num);//删除学号为Num的学生信息
bool UpdateInfo(int Num,PSTUDENT pNewInfo);//修改学号为Num的学生信息为pNewInfo指向的内容
void PrintInfo();//打印所有学生信息
int main()
{
PrintMenu();
int iSel=0;
while(1)
{
printf("输入操作选择:");
scanf("%d",&iSel);
switch(iSel)
{
case 0:
return 0;
case 1:
PrintInfo();
continue;
case 2:
InsertInfo();
continue;
case 3:
{
int num=0;
printf("输入要删除的学生学号:");
scanf("%d",&num);
if(DeleteInfo(num))
printf("删除成功!\n");
else
printf("删除失败!\n");
continue;
}
case 4:
{
int num=0;
printf("输入要修改的学生学号:");
scanf("%d",&num);
STUDENT stu={0};
printf("输入该学生的新信息(空格分隔):");
scanf("%d%s%d",&stu.Num,&stu.name,&stu.age);
if(UpdateInfo(num,&stu))
printf("修改成功!\n");
else
printf("修改失败!\n");
continue;
}
continue;
default:
continue;
}
}
return 0;
}
void PrintMenu()
{
printf("******操作菜单******\n");
printf("* 1. 打印学生信息\n");
printf("* 2. 添加学生信息\n");
printf("* 3. 删除学生信息\n");
printf("* 4. 修改学生信息\n");
printf("* 0. 退出系统\n");
printf("*********************\n");
}

void InsertInfo()
{
//pCur为当前输入的信息结构指针,pNail为前一个学生信息结构指针
PSTUDENT pCur;
printf("请输入学生记录(各元素用空格分隔,输入学号为0时停止)\n");
while(true)
{
pCur = (PSTUDENT)malloc(LEN);
memset(pCur,NULL,LEN);
printf("==>:");
scanf("%d%s%d",&pCur->Num,pCur->name,&pCur->age);
if(pCur->Num==0)
break;
if(ExistStudent(pCur->Num))
{
printf("该学生信息已经存在!\n");
break;
}
if(n==0)
{
//初始化头结点和保存前一个结构指针
pNail=pHeader=pCur;
pHeader->pNext=NULL;
}
else
{
pNail->pNext=pCur;
pNail=pCur;
pCur->pNext=NULL;
}
n++;
}
}
bool DeleteInfo(int Num)
{
PSTUDENT pStu=pHeader;
if(!pStu)
return false;
for(pStu;pStu!=NULL;pStu=pStu->pNext)
{
if(Num==pStu->Num)
{
//要删除的为头结点
pHeader=pStu->pNext;
return true;
}
else if(pStu->pNext&&Num==pStu->pNext->Num)
{
pStu->pNext=pStu->pNext->pNext;
return true;
}
}
return false;
}
bool UpdateInfo(int Num,PSTUDENT pNewInfo)
{
PSTUDENT pStu=pHeader;
if(!pStu)
return false;
if(Num!=pNewInfo->Num&&ExistStudent(pNewInfo->Num))
return false;
for(pStu;pStu!=NULL;pStu=pStu->pNext)
{
if(Num==pStu->Num)
{
pStu->Num=pNewInfo->Num;
memset(pStu->name,0,sizeof(pStu->name));
strcpy(pStu->name,pNewInfo->name);
pStu->age=pNewInfo->age;
return true;
}
}
return true;
}
void PrintInfo()
{
PSTUDENT pStu=pHeader;
if(!pStu)
{
printf("没有学生信息!\n");
return;
}
for(pStu;pStu!=NULL;pStu=pStu->pNext)
printf("学号:%d 姓名:%s 年龄:%d\n",pStu->Num,pStu->name,pStu->age);
}
bool ExistStudent(int Num)
{
PSTUDENT pStu=pHeader;
if(!pStu)
return false;
for(pStu;pStu!=NULL;pStu=pStu->pNext)
{
if(Num==pStu->Num)
return true;
}
return false;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wanfustudio
2009-04-27 · TA获得超过1万个赞
知道大有可为答主
回答量:5513
采纳率:100%
帮助的人:3689万
展开全部
char *s = (char*)malloc( size );

char *p = (char**)malloc(sizeof(char*) *size);
for(i = 0; i < size; i++)
{
p[i] = (char*)malloc( sizeof(char) * size2);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式