本節(jié)來講解關于gets函數(shù)的用法,在C語言中,除了用scanf,以%s接收字符串之外,還可以使用gets函數(shù)更方便的接收字符串。
其函數(shù)原型如下:
char *gets(char *str);
在包含 include <stdio.h>頭文件的情況下,可以用gets直接往字符數(shù)組里接收字符串,我們通過觀察函數(shù)原型,可以看到在gets中傳入一個字符指針,也就是存放這個字符串的字符數(shù)組地址即可接收,需要主要的是,要保證能存的下。
其運行過程為:當執(zhí)行gets函數(shù)時,程序會等待用戶從鍵盤輸入的字符串,一旦遇到結束標志,即回車,那么之前輸入在緩沖區(qū)中的字符串則會一起輸入到gets中str所指向的內存區(qū)域里。此過程與scanf函數(shù)類似,最主要的不同在于,scanf接收時的結束標志有空格和回車,而gets不包括空格。也就意味著gets可以接收空格本身作為內容的一部分。這在實際解題、開發(fā)過程中時很有用的。
下面看一個例子:
# include <stdio.h> int main(void) { char str[100] = "\0"; printf("請輸入字符串:\n"); gets(str); printf("剛才輸入的字符串是:\n"); printf("%s\n", str); return 0; }
當我們運行程序后,直接在程序中輸入字符串,如www.sztianhecheng.cn 則程序輸出:
剛才輸入的字符串是: www.sztianhecheng.cn
大家可以自行嘗試,需要注意的是gets不會檢查輸入的字符串長度,即可能超出字符串數(shù)組的長度造成內存溢出,這其實也是gets函數(shù)不安全的原因,其已經在不少OJ中不允許使用。詳情可以閱讀文章 為什么gets函數(shù)不能用了?
C語言網提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程