首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CC++ gets、fgets、gets_s函数使用引起的思考

参考链接: C++ gets() 2019独角兽企业重金招聘Python工程师标准>>>          最近做游戏编辑器,自己试着用C/C++写了一个读取简单配置表的函数,在控制台下测试的时候,使用了...C的标准库gets函数,发现编译器报告gets函数unsafe,网上搜索了一下,发现gets函数不对接受字符串的buffer进行边界检测,会造成越界,从而产生bug;自己写的东西,也是自己用的东西,当然可以在定义配置表的时候得到控制...函数获取的不一样,fgets函数获取的字符串会在buffer里面保留换行符,而gets函数不会;好吧,问题找到了,解决也很简单,把最后一个换行符拿掉,换成'\0'就可以了。...然后,又发现有个gets_s函数,可以像gets一样不会获取换行符,也不会有gets的越界问题,然后在cppreference.com查看了这几个函数的描述,却发现gets_s函数是一个标准库扩展函数,...一个可选项;所以就不知道这个gets_s函数在各个编译器下的支持情况如何!

90300
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    gets 、getchar 、fgets 、scanf的用法

    4.scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。   gets可以接收空格。   ...6.gets和fgets区别:   每当讨论 gets 函数时,大家不由自主地就会想起 1988 年的“互联网蠕虫”,它在 UNIX 操作系统的 finger 后台程序中使用一个 gets 调用作为它的攻击方式之一...很显然,对蠕虫病毒的实现来说, gets 函数的功劳不可小视。不仅如此,GCC 也不推荐使用gets和puts函数。   ...由此可见,gets 函数是极其不安全的,可能成为病毒的入口,因为 gets 函数没有限制输入的字符串长度。...相对于 gets 函数,fgets 函数最大的改进就是能够读取指定大小的数据,从而避免 gets 函数从 stdin 接收字符串而不检查它所复制的缓冲区空间大小导致的缓存溢出问题。

    3.1K60

    最通俗易懂地讲解scanf、gets和getchar的区别

    这一点和 gets 是不同的!!!在后面的 gets 中会有详细地介绍。 小结: 不接收 空格,不接收 回车。 2、getchar 接着要说的,是 getchar() 函数。...这个时候就需要加一个 回车符(\n),用 scanf('\n);;或者读取这个 回车符(\n),用 gets(); 或 getchar();。...小结: 不接收 空格 和 回车 2、gets 到这里,你应该不会忘记上面说过的 scanf 是如何处理 回车符(\n) 的了,这一点和 gets 是差别巨大的!!!...gets 对末尾 回车符 的处理方式是,接收 回车,但把 回车 替换为 \0,不像 scanf 是留在缓存中,所以在用 gets 时,要注意数组的大小增加1,不然就会出现数组越界等问题。...---- 除了 回车 就是 空格 的问题了,gets 是接收 空格 的,也就是可以读取并输出 空格。

    5.6K31

    linux系统下,警告:warning: implicit declaration of function ‘gets’ 和 war

    字符数组 的英文名字是 char [] gets()函数的基本用法为: char *gets(char *s); 该函数的参数是一个字符数组,该函数的返回值也是一个字符数组。...linux下的代码如下: 1 #include 2 3 int main() 4 { 5    char a[100] = { 0 }; 6    gets...------------------- 原因: 问题出在程序中使用了 gets是非常不安全的。...gets()函数在获取输入时,如果无限输入会造成栈空间溢出,在程序返回时,不能正常的找到返回地址,程序将发生不可预测行为。...-------------------------------------- 解决: 解决办法是使用 fgets,但由于fgets函数是为读取文件设计的,所以读取键盘是没有gets那么方便。

    3K10
    领券