您的程序中出现了访问冲突(分段错误)

时间:2016-04-22 11:21:45

标签: c struct scanf fgets

有多少学生:2(工作正常) 有多少学生:4(它给出错误“您的程序中出现了访问冲突(分段错误)。”

为什么它发生在我身上,我花了4个小时但却无法理解。

#include <stdio.h>


struct student 
{
    int rollno;
    char name[20];
};

int main()
{   
    int n,i,j;

    struct student detail[n];

    printf("how many students: ");
    scanf("%d",&n);
    fflush(stdin);

    for(i=0; i<n; i++)
    {            
        printf("enter student no.%d\n",(i));
        printf("Name: ");
        gets(detail[i].name);
        printf("Roll No: ");
        scanf("%d",&detail[i].rollno);
        fflush(stdin);
    }

    for(i=0; i<n; i++)
    {
        printf("Student no. %d Detail\n",(i+1));
        printf("Name:\t\t%s \nRoll No: \t%d\n",detail[i].name,detail[i].rollno);
    }

    getch();
}

1 个答案:

答案 0 :(得分:4)

在您的代码中,主要问题是

 int n,i,j;
 struct student detail[n];

您正在使用n未初始化。它调用undefined behavior。您需要在扫描用户的值后移动detail[n]; 的定义。

那就是说,

  1. 检查scanf()的返回值以确保成功。
  2. gets()很危险,因为它可能导致缓冲区溢出。请改用fgets()
  3. 根据标准,fflush(stdin)为UB,请将其删除。
  4. 如果仅包含getch(),则
  5. getchar()应为stdio.h