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

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

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

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

C语言gets()函数和scanf()函数关于字符串的输入

前言 在C语言中,有很多关于输入字符串的函数。在学习和使用C语言时,我们也无法避免需要输入字符串,因此本文是关于C语言中输入字符串的两个函数 gets() 和 scanf() 的。...一、gets()函数 功能:从标准输入流 stdin 中读取一行,并将其存储在缓冲区中。该行由第一个换行符 ('\n') 之前的所有字符组成。 注意:预留存储字符串的空间要足够大....头文件: #include 代码示例: #include int main() { char arr[20] = { 0 }; gets(arr); printf...("%s\n", arr); return 0; } 输入与输出: hs sfgs jsf,fh hs sfgs jsf,fh 二、scanf()函数 功能:一般输入字符串、数组、整型...的函数(...,还是gets()函数,使用时都具有缺陷 这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位点赞评论收藏⭐️,谢谢!!!

31940

c-gets()方法

; printf("%s\n", buff); return 0; } A:这个不显眼的问题就是使用了gets()方法,其函数原型如下: char* gets(char *s); 此方法接受一个字符数组参数...gets()函数是不安全的,不推荐使用,一般情况下编译器也会给出警告提示:the `gets’ function is dangerous and should not be used。...gets()不检查预留存储区是否能够容纳实际输入的数据。多出来的字符简单的溢出到相邻的存储区,可能会导致错误。...所以,这里我们一般用fgets()方法更好,函数原型如下: char* fgets(char *s, int n, FILE *stream); 一般使用fgets()函数,都是读取文件当中的n-1个字符到...s中,其实,此函数还有一个很好的用处就是从标准输入流中读取字符串,而且不用担心输入的字符个数超出了字符数组的大小而导致溢出的问题!

37630

gets 、getchar 、fgets 、scanf的用法

4.scanf( )函数gets( )函数都可用于输入字符串,但在功能上有区别。   gets可以接收空格。   ...很显然,对蠕虫病毒的实现来说, gets 函数的功劳不可小视。不仅如此,GCC 也不推荐使用gets和puts函数。   ...由此可见,gets 函数是极其不安全的,可能成为病毒的入口,因为 gets 函数没有限制输入的字符串长度。...相对于 gets 函数,fgets 函数最大的改进就是能够读取指定大小的数据,从而避免 gets 函数从 stdin 接收字符串而不检查它所复制的缓冲区空间大小导致的缓存溢出问题。...与 gets 函数不同的是,如果 fgets 函数读到换行符,就会把它存储到字符串中,而不是像 gets 函数那样丢弃它。即给定参数 n,fgets 函数只能读取 n-1 个字符(包括换行符)。

2.8K60

c语言中gets()的详细用法

今天说一说c语言中gets()的详细用法,希望能够帮助大家进步!!! gets从标准输入设备读字符串函数。...这个事实导致gets函数只适用于玩具程序,为了避免这种情况,我们可以用fgets(stdin) (fgets实际上可以读取标准输入(即大多数情况下的键盘输入),具体参阅fgets词条)来替换gets()...gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但...gets()函数将接收输入的整个字符串直到遇到换行为止。...gets(s) 函数中的变量s为一字符串指针。如果为单个字符指针,编译连接不会有错误,但运行后内存溢出错误。

1.4K20

小朋友学C语言(42):gets和fgets

一、gets()函数 原型:char *gets(char *str); 头文件:stdio.h 例1 #include int main() { char str[10]...:在函数‘main’中: test.c:(.text+0x1d): 警告: the `gets' function is dangerous and should not be used....不正确使用gets()函数的时候造成的危害是很大的,就像我们刚才看到的那样,a的值被字符串s溢出的值给替换了。...二、fgets()函数 原型:char * fgets(char * s, int n,FILE *stream); 头文件:stdio.h fgets()函数读取到它所遇到的第一个换行符的后面,或者读取比字符串的最大长度少一个的字符...然后fgets()函数向末尾添加一个空字符以构成一个字符串。如果在达到字符最大数目之前读完一行,它将在字符串的空字符之前添加一个换行符以标识一行结束。

1.3K10
领券