我在 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);