[英]*** stack smashing detected ***: terminated Aborted
我正在尝试创建一个程序,允许我为许多学生(1-25 之间)输入成绩。 对于每个学生,我想输入一些成绩(1-10 之间)。 对于每个学生,我应该根据我输入的年级数提供他们的名字和姓氏、年龄和平均成绩。 这是一个分配,所以我需要在我的程序中有一个名为Info
的struct
,在里面,它有char
变量firstName和lastName 、 int
变量age和float
变量average 。
#include <stdio.h>
int gradeVar;
int studVar;
struct Info {
char firstName[20];
char lastName[20];
int age;
int Exam; //This is for something I planned to add later
float Average;
};
int main() {
printf("How many students will you grade (1-25)? ");
scanf("\n%i", &studVar);
if (studVar<1 || studVar>25) {
do{
printf("Invalid\n");
printf("How many students will you grade (1-25)? ");
scanf("\n%i", &studVar);
} while (studVar<1 || studVar>25);
}
printf("How many grades will you read per student (1-10)? ");
scanf("\n%i", &gradeVar);
if(gradeVar<1 || gradeVar>10) {
do{
printf("Invalid\n");
printf("How many grades will you read per student (1-10)? ");
scanf("\n%i", &gradeVar);
} while(gradeVar<1 || gradeVar>10);
}
struct Info Student[studVar];
for(int n=1; n <= studVar; ++n) {
printf("Enter First Name for student %i: ", n);
scanf("\n%s", Student[n].firstName);
printf("Enter Last Name for student %i: ", n);
scanf("\n%s", Student[n].lastName);
//Every thing worked fine until I added the last two lines below//
printf("Enter age for student %i: ", n);
scanf("\n%d", &Student[n].age);
};
return 0;
}
直到我添加最后两行:
printf("Enter age for student %i: ", n);
scanf("\n%d", &Student[n].age);
我的 output 出现错误说堆叠粉碎
我不完全确定为什么会发生这种情况,也不知道在哪里修复它,以便它按照我想要的方式运行。 如果有人能为我澄清这一点,我将不胜感激。
预期的:
for(int n=0; n < studVar; ++n)
得到:
for(int n=1; n <= studVar; ++n)
Arrays 是基于 0 而不是基于 1。
如果您在名称组件中超过 19 个字符,则还有另一个溢出等着您。
在 C 中,当你声明struct Info Student[studVar];
,该数组的有效索引是 0 到studVar - 1
,而不是1 到studVar
。
因此,您在循环中的scanf
语句应该使用n - 1
而不是n
。 您的问题是,当您输入2
作为学生人数时,您会得到Student[0]
和Student[1]
。
尝试写入Student[2].id
将导致未定义的行为,例如,嗯,...,我猜是堆栈粉碎:-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.