由於linux下沒有gets函式,所以提示函式警告
用fgets代替就行了。
函式算在標頭檔案:#include
函式原型:
int fgetc(file *stream);
char *fgets(char *s, int size, file *stream);
int getc(file *stream);
int getchar(void);
char *gets(char *s);
函式說明:
fgetc() :從讀取檔案流中讀取下乙個字元,並將其以無符號數返回,或者返回檔案末尾標誌或錯誤標誌。 unsigned char cast to an int,
getc() :和fgetc差不多,只是在讀取的時候會檢查檔案流。
getchar() :和getc(stdin)等效。
gets() :從stdin中讀取一行字串,直到一行結束或是到檔案末尾,字串以』\0』結尾。但是不會檢查是否有溢位。
fgets() 讀取少於size長度的字元,直到新的一行開始或是檔案結束,最後會在讀取的字串最後乙個字元後加乙個結束字元』\0』 。
關於返回值:
fgetc(), getc() and getchar()如果讀取成功返回的是讀取到的字元,並且將字元轉換為無符號數或是檔案末尾,讀取失敗則返回錯誤值。
gets() and fgets() 如果讀取成功返回的是讀取到的字元,無資料讀取或讀取錯誤返回null。
建議:最好不要使用gets,因為它不檢測讀回來的資料長度是否超過自己所擁有的buff的長度,所以有可能會造成溢位。所以它的使用會造成程式的潛在隱患,會使程式不安全。可以是用fgets()來代替它。
但是替換後問題來了,程式就不對了,然後差錯發現gets遇到回車停止輸入,且回車符不收取,但是fgets卻是收取的,因此把最後的那個回車符換成\0就行了,強制中斷字串
Linux下gets函式警告
由於linux下的gcc編譯器不支援gets函式,程式編譯過後會出現乙個警告,即 warning the gets function is dangerous and should not be used.此時,可以用fgets函式代替,函式在標頭檔案stdio.h中,函式原型 char fgets...
linux 下gets函式編譯出錯問題
main.c 29 5 warning implicit declaration offunction gets wimplicit function declaration gets buffer warning the gets function is dangerous and should ...
linux下so包含函式名衝突解決
乙個專案可能包含多個so,但是不同的so中可能包含相同的函式名。在編譯和連線的時候不會報錯,但是在執行的時候可能會出現莫名其妙的錯誤,多是段錯誤。1 修改函式名 費時費力 2 隱藏so中的函式 最穩妥的辦法 cflag 加上 fvisibility hidden 要匯出的函式加上attribute ...