gets() 函数抛出异常?
gets() function throw exception?
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 个字符,控制台打印正确(并且不打印 "press any key to continue... due to "system("pause") statment")但是程序卡在调试器屏幕上并且在最后一个 "printf" 语句之后我得到一个红色错误符号弹出窗口说:
"Run-Time Check Failure #2 - Stack around the variable 'lastName' was corrupted."
这是否意味着 "gets()" 函数将只读取 5 个独占字符?
你这里有多个错误:
- 在存在
gets
的古老的过时 C 中,您必须 #include <stdio.h>
否则您可能会出现奇怪的 运行 时间行为,因为古老的过时 C 允许没有原型的函数。
- 在现代和半现代 C 语言中,函数
gets
已 removed/flagged 过时,永远不应使用。参见 Why is the gets function so dangerous that it should not be used? and also What are the functions from the standard library that must/should be avoided?。
- C 中的字符串以 null 终止,这意味着您必须为 null 终止符留出空间。
另请注意,函数格式 void getInputWith_gets()
已过时,您应该写成 void getInputWith_gets(void)
.
总的来说,您似乎是从完全过时的来源(超过 20 年)学习 C。
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 个字符,控制台打印正确(并且不打印 "press any key to continue... due to "system("pause") statment")但是程序卡在调试器屏幕上并且在最后一个 "printf" 语句之后我得到一个红色错误符号弹出窗口说: "Run-Time Check Failure #2 - Stack around the variable 'lastName' was corrupted." 这是否意味着 "gets()" 函数将只读取 5 个独占字符?
你这里有多个错误:
- 在存在
gets
的古老的过时 C 中,您必须#include <stdio.h>
否则您可能会出现奇怪的 运行 时间行为,因为古老的过时 C 允许没有原型的函数。 - 在现代和半现代 C 语言中,函数
gets
已 removed/flagged 过时,永远不应使用。参见 Why is the gets function so dangerous that it should not be used? and also What are the functions from the standard library that must/should be avoided?。 - C 中的字符串以 null 终止,这意味着您必须为 null 终止符留出空间。
另请注意,函数格式 void getInputWith_gets()
已过时,您应该写成 void getInputWith_gets(void)
.
总的来说,您似乎是从完全过时的来源(超过 20 年)学习 C。