国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

Linux系統下C語言gets函數出現警告問題的解決方法

2020-05-23 13:25:11
字體:
來源:轉載
供稿:網友

發現問題

最近在Linux下編譯C語言,用到gets這個函數,代碼如下:

#include <stdio.h>#include <string.h>#include <string.h>void main(){char s[100]; // 存放輸入的字符串int i, j, n;printf("輸入字符串:");gets(s);n=strlen(s);for(i=0,j=n-1;i<j;i++,j--)if(s[i]!=s[j]) break;if(i>=j)printf("是回文串/n");elseprintf("不是回文串/n");}

Linux系統,C語言,gets函數,警告

但是出現如下警告,

[linuxidc@localhost linuxidc.com]$ gcc linuxidc.c -o linuxidc.com

linuxidc.c: 在函數‘main'中:

linuxidc.c:8:5: 警告:不建議使用‘gets'(聲明于 /usr/include/stdio.h:638) [-Wdeprecated-declarations]

gets(s);

^

/tmp/ccvwVatT.o:在函數‘main'中:

linuxidc.c:(.text+0x1f): 警告:the `gets' function is dangerous and should not be used.

Linux系統,C語言,gets函數,警告

問題解決

原因就在于,gets不會去檢查字符串的長度,如果字符串過長就會導致溢出。如果溢出的字符覆蓋了其他一些重要數據就會導致不可預測的后果。在man手冊里也有關于gets這樣的警告:

Never use gets().  Because it is impossible to tell without knowing the data in advance how many  characters  gets()  will  read,  and  because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use.  It has  been  used  to  break  computer security.

可以用scanf的掃描集來實現這一功能,只要在方括號中寫入“^/n”,即:直到輸入了回車才停止掃描。下面來演示這一用法:

#include <stdio.h>#include <string.h>#include <string.h>void main(){char s[100]; // 存放輸入的字符串int i, j, n;printf("輸入字符串:");scanf("%[^/n]",s); //改成這個就OKn=strlen(s);for(i=0,j=n-1;i<j;i++,j--)if(s[i]!=s[j]) break;if(i>=j)printf("是回文串/n");elseprintf("不是回文串/n");}

Linux系統,C語言,gets函數,警告

OK,問題解決。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 同德县| 镇康县| 娱乐| 阿合奇县| 桐柏县| 吉木萨尔县| 华亭县| 浙江省| 龙陵县| 新营市| 怀仁县| 原平市| 南安市| 淮安市| 浠水县| 乌拉特中旗| 光泽县| 婺源县| 大同县| 工布江达县| 甘孜| 宾阳县| 冀州市| 礼泉县| 山西省| 沭阳县| 衡山县| 介休市| 郴州市| 北宁市| 普格县| 和政县| 河北区| 嘉荫县| 武乡县| 淳化县| 甘肃省| 海门市| 元阳县| 北安市| 深州市|