有多少学生: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();
}
答案 0 :(得分:4)
在您的代码中,主要问题是
int n,i,j;
struct student detail[n];
您正在使用n
未初始化。它调用undefined behavior。您需要在扫描用户的值后移动detail[n];
的定义。
那就是说,
scanf()
的返回值以确保成功。gets()
很危险,因为它可能导致缓冲区溢出。请改用fgets()
。fflush(stdin)
为UB,请将其删除。getch()
,则getchar()
应为stdio.h
。