如何纠正这个分段错误?

How to rectify this segmentation fault?

我的一个朋友正在学习指针的概念,所以他写了这个程序,但我不知道这个程序是为什么。它显示分段错误。我怎样才能找到这个程序中的错误?

代码如下:

#include<stdio.h>
#include<conio.h>
struct Student
{
    /* data */
    char name[20];
    int age;
    // int rollNo;
};
int main()
{
    struct Student s1;
    struct Student *ptr;
    ptr = &s1;

    scanf("%s",ptr->name);
    scanf("%d",ptr->age);
    // scanf("%d",ptr->rollNo);

    printf("%s",(*ptr).name);
    printf("%d",(*ptr).age);
    // printf("%d",(*ptr).rollNo);
return 0;
}

当你想读取一个整数时,你需要传递一个指向scanf的指针,像这样:

scanf("%d", &(ptr->age));

您还需要通过检查 return 值来确保输入有效,如下所示:

count = scanf("%d", &(ptr->age));
if (count == 1) {
    /*an integer was entered*/
}

编译 C 程序时,应始终启用警告。例如,GCC 编译器会告诉您有关原始程序的信息:

$ gcc -o test -Wall test.c
test.c: In function ‘main’:
test.c:16:10: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
  scanf("%d", ptr->age);
         ~^   ~~~~~~~~