Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 空指针分配错误联合_C_Pointers_Null_Variable Assignment_Unions - Fatal编程技术网

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
    很好。