空指针赋值错误联合

时间:2015-10-21 07:31:22

标签: 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("%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();
}

2 个答案:

答案 0 :(得分:4)

  *a=s1;

将此更改为 -

  a=&s1;

这句话 -

scanf("%d",a->roll_no);     // %d expects address of int variable

应该是 -

scanf("%d",&a->roll_no);

注意 - - void main() - &gt; int main(void)int main(int argc, char **argv)

答案 1 :(得分:2)

  1. 该行

    *a = s1;
    

    s1复制到内存a指向的内容,尽管您没有分配任何内存。

    我认为您的实际意图是加载a,地址为s1

    a = &s1;
    
  2. 您需要向scanf提供对象的地址,以便从stdin读取:

    scanf("%d",&a->roll_no);
    
  3. 该行

    scanf("%s",a->name);
    

    可能导致缓冲区溢出,因为它读取任何字符串,无论长度如何。写

    scanf("%9s", a->name);
    

    为了安全或更好,请使用fgets

  4. void main()不是main的严格一致定义。如果您的系统允许,则可以,但不应该是int main()int main(int argc, char** argv)