求大神解惑!一个小程序运行不了

#include
#include
struct data
{
int day,month,year;
} ;
struct stu
{
char name[20];
long num;
struct data birthday;
} ;
int main()
{
struct stu *student;
student=malloc(sizeof(struct stu));
printf("Input name,number,year,month,day:/n");
scanf("%s",student->name);
scanf("%ld",&student->num);
scanf("%d%d%d",&student->birthday.year,&student->birthday.month,
&student->birthday.day);
printf("/nOutputname,number,year,month,day/n");
printf("%20s%10ld%10d//%d//%d/n",student->name,student->num,
student->birthday.year,student->birthday.month,
student->birthday.day);
return 0;
}

程序怎么出错了,求大神解答!!
错误报告是这样的。
E:\c++稿子\sdas.cpp(16) : error C2440: '=' : cannot convert from 'void ' to 'struct stu *' Conversion from 'void' to pointer to non-'void' requires an explicit cast 执行 cl.exe 时出错.

6个回答

首先 ,只看到了 malloc 没有看到free。student=malloc(sizeof(struct stu)); 这里有问题,应该改为 ,student=(stu*)malloc(sizeof(struct stu));而且没有进行判断,万一内存不够用,无法申请到内存怎么处理。容易造成内存泄露

bishi5240
bishi5240 换成了student=(struct stu*)malloc(sizeof(struct stu)); 可以运行了,谢谢各位了!
大约 5 年之前 回复
student=malloc(sizeof(struct stu)); 
改成
 student=(stu *)malloc(sizeof(struct stu)); 

类型错误,,,,转化一下类型

bishi5240
bishi5240 可以发个正确的程序看看吗?
大约 5 年之前 回复
bishi5240
bishi5240 怎么弄,不会啊,求教
大约 5 年之前 回复

gcc下可以正常编译通过(加上正常的头文件的话)。

nswcfd
nswcfd 手头没有vc环境,没办法回答,估计问题就像其他人说的,需要显式的类型转换吧。
大约 5 年之前 回复
bishi5240
bishi5240 我用的是vc++6.0,不行吗?
大约 5 年之前 回复

student = ( stu* ) malloc ( sizeof ( struct stu ) );

首先 ,只看到了 malloc 没有看到free。student=malloc(sizeof(struct stu)); 这里有问题,应该改为 ,student=(stu*)malloc(sizeof(struct stu));而且没有进行判断,万一内存不够用,无法申请到内存怎么处理。容易造成内存泄露

malloc(sizeof(struct stu)); 之前要加强制类型转换,因为默认malloc分配的指针是void*类型

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐