gets 函数是一个不安全的函数,因为它没有提供对输入数据长度的检查,因此可能会导致缓冲区溢出等安全问题。为了避免这种风险,该函数已经从 C11 标准中被移除了。
在 Visual Studio 2015 及更高版本中,gets 函数已经被标记为不安全函数,并在编译时产生错误,提示该函数未定义。
如果你需要从标准输入流中读取字符串,可以使用 fgets 函数来代替。fgets 函数会在读取到指定长度的数据、遇到换行符或者到达文件末尾时停止读取,从而避免了缓冲区溢出的问题。示例代码如下:
char str[100];
fgets(str, sizeof(str), stdin);
另外,如果你确实需要使用 gets 函数,可以通过以下方式来解决未定义标识符的问题:
使用旧版本的 Visual Studio,比如 Visual Studio 2013 及更早版本,这些版本中仍然支持 gets 函数。
在代码中添加以下宏定义:
#define _CRT_SECURE_NO_WARNINGS
这个宏定义告诉编译器不要警告不安全的函数,这样 gets 函数就可以被编译通过了。但是请注意,这样做仍然存在安全隐患,因此不建议使用 gets 函数。
DS小龙哥