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, %sn", 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 个独占字符?
这里有多个错误:
- 在存在
gets
的古老过时的 C 中,您必须#include <stdio.h>
否则您可能会得到奇怪的运行时行为,因为古老的过时的 C 允许没有原型的函数。 - 在现代和半现代 C 中,函数
gets
被删除/标记为过时,永远不应使用。请参阅为什么 get 函数如此危险以至于不应使用它?以及必须/应该避免的标准库中的哪些功能? - C 中的字符串以 null 结尾,这意味着您必须为空终止符留出空间。
另请注意,函数格式void getInputWith_gets()
是过时的样式,您应该编写void getInputWith_gets(void)
。
总的来说,你似乎从一个完全过时的来源(超过20年过时(学习C。