Run-Time Check Failure #2 ,
通常表示栈内存被破坏了。这个问题很可能是由于不正确的 scanf
使用引起的。具体来说,当你使用 scanf
来读取字符时,不应该使用 %s
格式说明符,因为 %s
会读取直到遇到空格或制表符为止的所有字符,这可能会导致读取超出 ch
变量分配的内存空间。
-
scanf
格式字符串错误:读取单个字符时应该使用%c
而不是%s
。 -
scanf
的&
操作符:读取字符时不需要&
操作符。 -
清除输入缓冲区:在使用
scanf
读取字符后,需要确保清除了输入缓冲区中的剩余字符,特别是换行符。
char ch;
printf("\n输入学生信息(y/n);\n");
scanf(" %c", &ch); // 使用 %c 读取单个字符,并在前面添加空格以消耗前面的换行符
while (getchar() != '\n'); // 清除缓冲区中的剩余字符