【问题标题】:Null pointer assignment error union空指针赋值错误联合
【发布时间】:2015-10-21 07:31:22
【问题描述】:

在上面的代码中,我无法输入学生的姓名,因为它给出了空指针分配错误。如何解决这个问题,我可以输入卷号并显示结果很好

#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();
}

【问题讨论】:

  • 您的意思是使用union 而不是struct
  • @Bathsheba 你是正确的,联合没有意义。
  • *a=s1; 也没有意义,可能会导致程序崩溃

标签: c pointers null variable-assignment unions


【解决方案1】:
  *a=s1;

把它改成 -

  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)

【讨论】:

  • Turbo C 不喜欢 int main ;)
  • @AlterMann 那么可能是 OP 说再见的时候了!到 Turbo C :-)
  • @AlterMann 不,Turbo C 接受 int main 就好了。
【解决方案2】:
  1. 线

    *a = s1;
    

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

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

    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)

【讨论】:

    猜你喜欢
    • 2012-10-31
    • 2023-04-02
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多