Linux系統(tǒng)下C語言gets函數(shù)出現(xiàn)警告問題的解決方法
發(fā)現(xiàn)問題
最近在Linux下編譯C語言,用到gets這個函數(shù),代碼如下:
#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");
else
printf("不是回文串\n");
}
但是出現(xiàn)如下警告,
[linuxidc@localhost linuxidc.com]$ gcc linuxidc.c -o linuxidc.com
linuxidc.c: 在函數(shù)‘main'中:
linuxidc.c:8:5: 警告:不建議使用‘gets'(聲明于 /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(s);
^
/tmp/ccvwVatT.o:在函數(shù)‘main'中:
linuxidc.c:(.text+0x1f): 警告:the `gets' function is dangerous and should not be used.
問題解決
原因就在于,gets不會去檢查字符串的長度,如果字符串過長就會導致溢出。如果溢出的字符覆蓋了其他一些重要數(shù)據(jù)就會導致不可預測的后果。在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的掃描集來實現(xiàn)這一功能,只要在方括號中寫入“^\n”,即:直到輸入了回車才停止掃描。下面來演示這一用法:
#include <stdio.h>
#include <string.h>
#include <string.h>
void main(){
char s[100]; // 存放輸入的字符串
int i, j, n;
printf("輸入字符串:");
scanf("%[^\n]",s); //改成這個就OK
n=strlen(s);
for(i=0,j=n-1;i<j;i++,j--)
if(s[i]!=s[j]) break;
if(i>=j)
printf("是回文串\n");
else
printf("不是回文串\n");
}
OK,問題解決。
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支持。
欄 目:C語言
下一篇:C語言中getchar()的返回類型為什么是int詳解
本文標題:Linux系統(tǒng)下C語言gets函數(shù)出現(xiàn)警告問題的解決方法
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/647.html
您可能感興趣的文章
- 01-10大數(shù)(高精度數(shù))模板(分享)
 - 01-10深入解析Linux下\r\n的問題
 - 01-10Linux線程管理必備:解析互斥量與條件變量的詳解
 - 01-10Linux C 獲取進程退出值的實現(xiàn)代碼
 - 01-10解析Linux下的時間函數(shù):設置以及獲取時間的方法
 - 01-10深入探討linux下進程的最大線程數(shù)、進程最大數(shù)、進程打開的文
 - 01-10基于linux下獲取時間函數(shù)的詳解
 - 01-10linux c 查找使用庫的cflags與libs的方法詳解
 - 01-10深入sizeof的使用詳解
 - 01-10深入探討Linux靜態(tài)庫與動態(tài)庫的詳解(一看就懂)
 


閱讀排行
本欄相關
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
 - 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
 - 04-02c語言的正則匹配函數(shù) c語言正則表達
 - 04-02c語言用函數(shù)寫分段 用c語言表示分段
 - 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
 - 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
 - 04-02c語言沒有round函數(shù) round c語言
 - 04-02c語言分段函數(shù)怎么求 用c語言求分段
 - 04-02C語言中怎么打出三角函數(shù) c語言中怎
 - 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
 
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
 - 04-02jquery與jsp,用jquery
 - 01-11ajax實現(xiàn)頁面的局部加載
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 01-10C#中split用法實例總結
 - 01-10使用C語言求解撲克牌的順子及n個骰子
 - 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-10SublimeText編譯C開發(fā)環(huán)境設置
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 01-10delphi制作wav文件的方法
 


