#用vs运行会出现gets函数被跳过,devc++则不会,把gets函数换成scanf后依然存在,不知道是什么原因,求各位能解答一下
VS里可以用 gets_s(p_stuscorelib[cunt].name, sizeof(p_stuscorelib[cunt].name)); 来代替 gets()
fflush(stdin); 这句改用为:getchar();
这是因为 gets 函数存在安全漏洞,已经被废弃,多数编译器已经将其标记为不安全函数,不再支持使用。
如果你使用的是 Visual Studio 编译器,它会默认启用安全检查机制,包括禁用不安全函数,这就是为什么 gets 函数被跳过的原因。而 DevC++ 编译器可能没有启用相同的安全检查机制,因此可以使用 gets 函数。
为了解决这个问题,你可以使用替代的函数,如 fgets 或 scanf,这些函数也可以实现 gets 函数的功能,但更安全。使用 fgets 函数,可以指定读取的字符数,避免溢出;使用 scanf 函数,可以使用格式化字符串指定读取的数据类型,避免读取错误的数据。
示例代码:
c
Copy
#include <stdio.h>
int main() {
char str[100];
printf("请输入字符串:");
fgets(str, sizeof(str), stdin);
printf("你输入的字符串是:%s", str);
return 0;
}
或者使用 scanf 函数:
c
Copy
#include <stdio.h>
int main() {
char str[100];
printf("请输入字符串:");
scanf("%s", str);
printf("你输入的字符串是:%s", str);
return 0;
}
请注意,使用 fgets 函数时,需要指定读取的字符数,否则可能会读取到比数组大小更多的字符,导致缓冲区溢出。
回答整理自chatgpt,如果有帮助麻烦采纳一下,谢谢啦!