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。