c语言gets函数弊端 gets函数的缺点

C语言里的gets()函数

C语言里的 gets(),scanf() 都不检查缓冲区是否会溢出。至于此“漏洞”有什么样的风险,我没有体会。自己写的程序,自己用,没有风险。

成都创新互联公司是一家集网站建设,中山企业网站建设,中山品牌网站建设,网站定制,中山网站建设报价,网络营销,网络优化,中山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

如果别人写的程序,含恶意代码,你也无可奈何,你不能叫别人用scanf()不用 gets()。

再说,

gets() 读取一行字符串,包括空白(空格,tab...)。

scanf("%s",....) 它没有 读取一行 的功能,遇到 空白 就不读下去了(它以空白为分隔符).

所以 scanf() 并不能代替 gets() 。

C语言gets()问题

因为你在使用gets之前还使用过别的读入函数(或宏),有的是不会把末尾的换行读取掉的,就会留在缓冲区,当你调用gets时,把上一次的换行字符给读取了,所以就像直接跳过了。

改善的方法是为gets函数上一句加上getchar();用于吸收回车。或是加fflush(stdin);刷新缓冲区。

c语言为什么有函数危险一说啊? 比如gets()的溢出操作等;

这是对程序产生BUG,出现不可靠性的一个描述,有些函数在某些意外情况会导致程序陷入不可控状态,仅仅是PC上运行最多也就是退出而已,但是如果是运行在飞机等系统里的话,就会有大麻烦,说危险也不为过。因为英文文献里描述为dangerous,所以也就翻译为危险。

函数执行需要一个栈空间,但这个栈空间容量是有限的,而且栈里存放了函数返回的地址。

gets()函数在获取输入时,如果无限输入会造成栈空间溢出,在程序返回时,不能正常的找到返回地址,程序将发生不可预测行为

C语言中的gets函数问题!

gets(str)有边界溢出的可能。

比如你的str定义只有80个char单元,但输入的时候却输入了80个以上的字符,那么就发生了溢出。c语言是不检查边界溢出的,编译不报错。但溢出会破坏内存中的数据,产生不可预料的后果。所以要尽量避免。

但平常练习的时候gets()函数是经常用到的,因为它用起来很方便。

我们现在所编写的程序主要是为了学习算法,并不是像专业程序员那样要求严密性,减少BUG。所以你在给字符串定义了一个足够大的长度时用gets()没关系。

话有说回来,保持一个严谨的编程风格也是很有必要的。你自己抉择吧。

text是一个二维数组,gets(text[t])是给text[t]赋值。

在C语言中为什么gets函数有的时候不推荐用? 编译的时候编译器都会提示warning?

这是关系到信息安全领域的一些知识。

会有这样的一个情况:

char a[12];

gets(a);

当你输入的东西远比12要长时,他还是会接收并写入空间。这样就溢出了,覆盖掉后面的相应空间。也就是说他写入了不该他来写的东西。如果写得设计好点,完全可以通过这个去完成一些不好的事情。编译器一般会提示你去换个安全的函数,来避免这个情况。

C语言中gets函数能否只接收一个换行符 如gets(a),输入时输入回车

由于scanf函数遇到空格后就停止输入,如需要输入一句话的话,要尝试其他的函数例如gets()函数。

原型函数为char*gets(char*buffer),返回一个指向char的指针,返回的指针与传递给他的指针是同一个指针。

例子:

charname[20];

gets(name);

printf(“%s”,name);

此时在控制界面中输入helloworld,输出将会是helloworld。

上例同时也可以写成:

charname[20];

char*ptr;

ptr=gets(name);

printf(“%s”,name);

printf(“%s”,ptr);

此时两句话输出的都是helloworld,从而证明ptr的指针就是赋给gets函数的指针。但是gets()函数有一个缺点,当输入的字符串的长度大于申请的空间时,会造成空间越界,此时在函数执行结束释放空间时会报错。

扩展资料

1、输出字符串的效果,宽度和精度同样也适用于字符串。

3、put是需要遇到’\0’才会输出的,因此通过字符串数组遍历赋值时,不要忘记加’\0’。


文章标题:c语言gets函数弊端 gets函数的缺点
链接地址:http://azwzsj.com/article/hjcijg.html