void getInputWith_gets()
{
char firstName[5];
char lastName[5];
printf("Enter your first name: ");
gets(firstName);
printf("Enter your last name: ");
gets(lastName);
printf("Hello, %s, %s\n", firstName, lastName);
}
int main(int argc, char **argv)
{
getInputWith_gets();
//getInputWith_fgets();
system("pause");
return 0;
}
我正在使用MS Visual Studio 2017,我知道使用“ gets()”函数的限制,我最多可以输入5个字符,但是如果我输入的是5个字符,则控制台可以正确打印(并且不会因为“ system(” pause“)语句”,所以不打印“按任意键继续...”,但是程序卡在调试器屏幕上,在最后一个“ printf”语句之后,我得到一个红色错误符号并弹出说: “运行时检查失败#2-变量'lastName'周围的堆栈已损坏。” 这是否意味着“ gets()”函数将仅读取5个互斥字符?
答案 0 :(得分:0)
您在这里有多个错误:
gets
的古老,过时的C语言中,您必须#include <stdio.h>
,否则您可能会得到怪异的运行时行为,因为古老的过时的C语言允许没有原型的函数。 gets
函数已被删除/标记为过时,因此切勿使用。参见Why is the gets function so dangerous that it should not be used?和What are the functions from the standard library that must/should be avoided?。还要注意,函数格式void getInputWith_gets()
是过时的样式,您应该编写void getInputWith_gets(void)
。
总体而言,您似乎正在从一个完全过时的资源(已经过了20年)学习C。