c语言动态分配

C、C++和Java语言
回复
kunlamp
帖子: 20
注册时间: 2006-10-31 14:30
来自: 山东
送出感谢: 0
接收感谢: 0
联系:

c语言动态分配

#1

帖子 kunlamp » 2007-04-15 1:04

请各位给看一下,怎么解决这个动态分配得问题.
#include<stdio.h>
#include<string.h>
#define LEN sizeof(struct student)
#define FORMAT "%d\n%s\n"
struct student
{
int num;

char name[20];

struct student *next;
} ;
int main()
{
struct student stu;

char choice;
stu.num=12345;
strcpy(stu.name,"lili");
stu.next=NULL;
struct student *p;
p=&stu;
printf("Do you want insert a student:");

if(choice=getchar()=='y')
{
p=p->next=(struct student ) new(LEN);//错误出现在这各地方
scanf("%d",p->num);
gets(p->name);


}
void print(struct student *);
print(&stu);

}

void print(struct student * p)
{
printf(FORMAT,p->num,p->name);

printf("\n");
}
请指点一下,十分感谢.
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#2

帖子 BigSnake.NET » 2007-04-15 12:59

new的语法貌似不是这样吧..
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
耗子
帖子: 18
注册时间: 2007-03-29 10:42
送出感谢: 0
接收感谢: 0
联系:

Re: c语言动态分配

#3

帖子 耗子 » 2007-04-15 13:35

错误1 写了: if(choice=getchar()=='y')
{
此处应为:
if ((choice = getchar()) == 'y')
{
...
运算符优先级问题。
错误2 写了: p=p->next=(struct student ) new(LEN);//错误出现在这各地方
此处 LEN 单位是字节,而new要求使用类型,因此你可以这样:
p = p->next = (struct student *) new char[LEN];

p = p->next = new struct student;
耗子过街,人人喊打
头像
zhan
帖子: 1880
注册时间: 2005-08-15 0:04
来自: 南7技校
送出感谢: 0
接收感谢: 0
联系:

#4

帖子 zhan » 2007-04-15 13:39

原生的 c 语言中是没有 new 的,所以这里应该用 malloc。注意包含头文件 <malloc.h>

p=p->next=(struct student*)malloc(LEN) 应该就没有问题了。。
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn
回复

回到 “C/C++/Java”