gpt4 book ai didi

c - Run-Time Check Failure #2 - s(Microsoft Visual C++ 2015(社区版)上的C语言)

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:28 25 4
gpt4 key购买 nike

我遇到过这个问题:Visual Studio 15 中的运行时检查失败 #2 - S。这发生在我还尝试在 C 语言中使用数组之前。根据我的教科书,下面的代码发生了什么

char myname[20];

printf("Type your name:");
scanf("%19s", myname);

printf("\n\n%s,Welcome to the class\n", myname);

根据教科书,如果我输入我的名字,例如:Tony Stark,问题只会扫描 Tony 并忽略空格后面的所有内容。然而,当我尝试它时,它出现运行时检查失败#2。

同样在下面的代码中

#include<stdio.h>

int main(void)
{
char name[30];
int seat[30] = { 0 };
int i, seatt, j;
char decision[1];

do
{
printf("Hi, what is your name? ");
scanf("%s", name);

printf("Welcome %s!\n\n", name);

printf("*********************\n");
printf("CINEMA 1 SEATING PLAN\n");
printf("*********************");
for ( i = 0; i < 30; i++)
{
if (i % 5 == 0)
{
printf("\n\n");
}
if (seat[i] == 0)
{
printf("%3d", i);
}
else
{
printf("%3s", "**");
}
}
printf("\n\n*********************");
do
{
printf("\n\nWhich seat do you want? ");
scanf("%d", &seatt);
if (seat[seatt]!=0)
{
printf("Sorry, seat is taken!\n");
for ( j = 0; j < 30; j++)
{
if (seat[j] == 0)
{
printf("Suggest to take seat: %d", j);
break;
}
}
}
} while (seat[seatt] != 0);
++seat[seatt];

printf("\n\nWould you like to make next booking (Y or N)? ");
scanf("%s", decision);
printf("\n\n");
if (decision[0] == 'Y' || decision[0] == 'y')
{
system("cls");
}

} while (decision[0] == 'Y' || decision[0] == 'y');
printf("See you again!\n");

return 0;
}

一切正常,直到最后一部分问我在哪里订下一张票,如果我输入 Y 以外的另一个,它也会出现同样的问题。

最佳答案

您对堆栈溢出不是很小心。在第二个代码中,您使用:

char decision[1];
scanf("%s", decision);

scanf 将附加一个尾随的 \0 终止字符,即使您实际上只输入了一个字符,它也已经干扰了堆栈中的一些其他数据。当用户输入更长时,更多的灾难就在眼前。在这种情况下,使用 "%c" 格式进行扫描。

关于c - Run-Time Check Failure #2 - s(Microsoft Visual C++ 2015(社区版)上的C语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37316204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com