得到一个错误陈述";运行时检查失败#2-围绕变量堆叠'被拒绝'已损坏.(Visual Stud



在我按键退出程序之前,我的所有代码都能很好地工作,当我按下'-'时就会发生这种情况。然后我得到了那个错误,我不知道如何解决它。这是我的代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
int main() {
char rejected[2] = { 0 };
char input = 0;
char exitProgram = 0;
printf("Please enter three letters you want filteredn");
for (int x = 0; x <= 2; x++) {
scanf("%s", &rejected[x]);
}
printf("Please enter a letter and I will tell you if it is filtered or notn");
for (int y = 0; y <= 99; y++) {
scanf("%s", &input);
if (input == rejected[0] || input == rejected[1] || input == rejected[2]) {
printf("Filtered letter!n");
}
else {
printf("Okay letter!n");
}
if (y %5 == 0) {
printf("If you would like to exit this program, please enter '-'. If not, please enter '+'n");
scanf("%s", &exitProgram);
if (exitProgram == '+') {
printf("Okay, continue having fun with my program!n");
}
else if (exitProgram == '-') {
printf("Thank you for playing with my program!n");
break;
}
}
}
return 0;
}

您在三个位置使用scanf%s格式说明符,后者用于读取字符串,但在每个位置都是不正确的。使用错误的格式说明符会调用未定义的行为,这可能会导致崩溃。

第一:

scanf("%s", &rejected[x]);

在这里,您确实想要读取单个字符,因此需要%c格式说明符。这一个接受任何字符,包括空格和换行符,所以您需要在它前面加一个空格,以消耗之前读取的任何剩余换行符:

scanf(" %c", &rejected[x]);

第二:

scanf("%s", &input);

inputchar,所以您再次需要此处的%c

scanf(" %c", &input);

第三:

scanf("%s", &exitProgram);

你在这里读到的是一个字符,所以像以前一样使用带前导空格的%c

scanf(" %c", &exitProgram);

你也有一个问题:

char rejected[2] = { 0 };
...
for (int x = 0; x <= 2; x++) {
scanf("%s", &rejected[x]);
}

数组rejected只包含2个元素,但您尝试读入3个元素。这还通过写入超过数组末尾来调用未定义的行为。将数组的大小更改为3。

char rejected[3] = { 0 };

最新更新