如何纠正这个分段错误?
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);
~^ ~~~~~~~~
我的一个朋友正在学习指针的概念,所以他写了这个程序,但我不知道这个程序是为什么。它显示分段错误。我怎样才能找到这个程序中的错误?
代码如下:
#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);
~^ ~~~~~~~~