我在 C 中遇到了一个问题。输入错误——它说 Segmentation fault
I face a problem in C. Input is wrong-- its say Segmentation fault
#include <stdio.h>
#include <string.h>
struct student_details{
char name[34];
int roll;
char section;
};
int main(){
struct student_details student[5];
for (int i = 0; i < 5; i++)
{
printf("Your full name = ");
scanf("%s", student[i].name);
printf("Your roll = ");
scanf("%d", student[i].roll);
}
return 0;
}
我认为我的代码有问题,请大家解决。
当我 运行 此代码时,它显示错误。 运行宁此代码此代码需要 1 次输入和第二次输入被跳过。
scanf
函数期望接受格式字符串,然后指向要扫描到的数据。 student[i].name
是一个数组,在这种情况下它会衰减为指向其第一个元素的指针。这行得通。
注:这个数组只包含34个字符。对于空终止符,您希望使用带有 scanf
的宽度说明符来限制输入并防止缓冲区溢出。 "%33s"
当您尝试阅读 roll
时:
scanf("%d", student[i].roll);
student[i].roll
是一个整数,不是指针。但是指针 是 数字,所以这将编译。不过,您的编译器应该警告您。但是,然后程序试图取消引用它认为是指针的这个值,并发生分段错误。
您要做的是传递 student[i].roll
的 地址 。
scanf("%d", &student[i].roll);
#include <stdio.h>
#include <string.h>
struct student_details{
char name[34];
int roll;
char section;
};
int main(){
struct student_details student[5];
for (int i = 0; i < 5; i++)
{
printf("Your full name = ");
scanf("%s", student[i].name);
printf("Your roll = ");
scanf("%d", student[i].roll);
}
return 0;
}
我认为我的代码有问题,请大家解决。 当我 运行 此代码时,它显示错误。 运行宁此代码此代码需要 1 次输入和第二次输入被跳过。
scanf
函数期望接受格式字符串,然后指向要扫描到的数据。 student[i].name
是一个数组,在这种情况下它会衰减为指向其第一个元素的指针。这行得通。
注:这个数组只包含34个字符。对于空终止符,您希望使用带有 scanf
的宽度说明符来限制输入并防止缓冲区溢出。 "%33s"
当您尝试阅读 roll
时:
scanf("%d", student[i].roll);
student[i].roll
是一个整数,不是指针。但是指针 是 数字,所以这将编译。不过,您的编译器应该警告您。但是,然后程序试图取消引用它认为是指针的这个值,并发生分段错误。
您要做的是传递 student[i].roll
的 地址 。
scanf("%d", &student[i].roll);