C 空指针分配错误联合
在上面的代码中,我不能输入学生的名字,因为它给出了一个空指针赋值错误。如何解决这个问题,我可以输入辊号,它显示的结果刚刚好C 空指针分配错误联合,c,pointers,null,variable-assignment,unions,C,Pointers,Null,Variable Assignment,Unions,在上面的代码中,我不能输入学生的名字,因为它给出了一个空指针赋值错误。如何解决这个问题,我可以输入辊号,它显示的结果刚刚好 #include<stdio.h> #include<conio.h> union student { int roll_no; char name[10]; }s1,*a; void main() { clrscr(); *a=s1; printf("Enter roll_no : "); scanf
#include<stdio.h>
#include<conio.h>
union student
{
int roll_no;
char name[10];
}s1,*a;
void main()
{
clrscr();
*a=s1;
printf("Enter roll_no : ");
scanf("%d",a->roll_no);
clrscr();
printf("Roll No : %d",a->roll_no);
getch();
clrscr();
printf("Enter name : ");
scanf("%s",a->name);
clrscr();
printf("Name : %s",a->name);
getch();
}
#包括
#包括
学生会
{
国际卷号;
字符名[10];
}s1,*a;
void main()
{
clrsc();
*a=s1;
printf(“输入卷号:”);
扫描(“%d”,a->卷号);
clrsc();
printf(“卷号:%d”,a->卷号);
getch();
clrsc();
printf(“输入名称:”);
scanf(“%s”,a->name);
clrsc();
printf(“名称:%s”,a->Name);
getch();
}
*a = s1;
scanf("%s",a->name);
将s1
复制到a
所指向的内存,尽管您没有分配任何内存
我认为您的实际意图是加载地址为s1
的a
:
a = &s1;
scanf
提供对象的地址,以便从stdin
读取:
scanf("%d",&a->roll_no);
*a = s1;
scanf("%s",a->name);
可能会导致缓冲区溢出,因为它读取任何字符串,无论其长度如何。写
scanf("%9s", a->name);
为了安全或更好,请使用void main()
不是严格符合main
的定义。如果您的系统允许,则可以,否则应该是intmain()
或intmain(intargc,char**argv)
a=&s1;
这句话呢-
scanf("%d",a->roll_no); // %d expects address of int variable
应该是-
scanf("%d",&a->roll_no);
注意--
void main()
int main(void)
或int main(int argc,char**argv)
你的意思是使用一个联合而不是一个struct
?@Bathsheba你是对的,联合没有意义。*a=s1
也没有意义,可能会导致程序崩溃。Turbo C不喜欢int main
;)@奥特曼,那么也许是OP说再见的时候了!!对于Turbo C:-)@AlterMann不,Turbo C接受了int main
很好。