C項目中用gets();會產(chǎn)生告警的原因和解決辦法如下:
一、告警類型:warning: implicit declaration of function 'gets' is invalid in C99 [-Wimplicit-function-declaration]
warning: the `gets' function is dangerous and should not be used.
函數(shù)“gets”的隱式聲明在C99中無效
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[15];//定義字符串
printf("input string:\n");//日志打印
/*在C項目中利用gets();輸入字符串會產(chǎn)生告警*/
gets(str1);//輸入字符串
puts(str1);//輸出字符串
return 0;
}
二、告警原因:
參考文獻:產(chǎn)生告警的原因參考連接
1.因為get
不是c99
標(biāo)準(zhǔn)的一部分,不應(yīng)該使用。因此,它被排除在標(biāo)準(zhǔn)庫中。
2.獲取
標(biāo)準(zhǔn)函數(shù)是C99標(biāo)準(zhǔn)中完全有效的一部分。它在 C99 中已經(jīng)過時(已棄用),并在 C11 中刪除。
3.函數(shù)gets();?已被棄用。不鼓勵您使用它,因為它被認(rèn)為是不安全的。什么意思?在你的程序中,你只傳遞一個接收器數(shù)組的名稱,并且不可能知道輸入會有多長。如果您的用戶記住他不應(yīng)該寫超過 20 個字符的名稱,那沒關(guān)系。但是,如果他超過該限制,gets():它將繼續(xù)將數(shù)組邊界寫入它不擁有的內(nèi)存中(會產(chǎn)生段錯誤Segmentation fault).
三、解決方案:
參考文獻:解決gets不能用的替代方案
1.利用fgets();取代gets();
fgets()函數(shù)的基本用法為:
fgets(char *s, int size, FILE *stream);
/*第一個參數(shù)是:字符類型的數(shù)組,第二個參數(shù)是:標(biāo)明這個數(shù)組的大小,*/
/*第三個參數(shù)是:如果總是通過鍵盤輸入的話,可以固定寫為stdin*/
2.解決代碼如下:
/*eg7.14,gets();已被棄用,代替的是采用fgets();p114*/
/********************************************************
fgets()函數(shù)的基本用法為:
fgets(char *s, int size, FILE *stream);
第一個參數(shù)是:字符類型的數(shù)組,第二個參數(shù)是:標(biāo)明這個數(shù)組的大小,
第三個參數(shù)是:如果總是通過鍵盤輸入的話,可以固定寫為stdin
參考文獻:
告警原因:https://stackoverflow.com/questions/37841617/implicit-declaration-of-function-gets-is-invalid-in-c99?noredirect=1
解決辦法:https://developer.aliyun.com/article/607824
*********************************************************/
#include <string.h>
int main(void)
{
char str1[15];
printf("input string:\n");
//gets(str1);
/*函數(shù)gets()已被棄用。不鼓勵您使用它,因為它被認(rèn)為是不安全的。
什么意思?在你的程序中,你只傳遞一個接收器數(shù)組的名稱,并且不可能知道輸入會有多長。
如果您的用戶記住他不應(yīng)該寫超過 20 個字符的名稱,那沒關(guān)系。
但是,如果他超過該限制,gets():它將繼續(xù)將數(shù)組邊界寫入它不擁有的內(nèi)存。*/
fgets(str1, sizeof(str1), stdin); //stdin 意思是鍵盤輸入
puts(str1);
}
四、C語言譚浩強代碼示例(包含參考書、在線編譯工具、代碼注釋等)文章來源:http://www.zghlxwxcb.cn/news/detail-423125.html
譚浩強C語言程序設(shè)計(1-3章代碼學(xué)習(xí))文章來源地址http://www.zghlxwxcb.cn/news/detail-423125.html
到了這里,關(guān)于warning: implicit declaration of function ‘gets‘ is invalid in C99 [-Wimplicit-function-declaration]的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!