gets()
函數在 C 語言中用于從標準輸入(通常是鍵盤)讀取一行文本,并將其存儲在指定的字符數組中。然而,gets()
函數存在嚴重的安全問題,因為它不檢查目標數組的大小,這可能導致緩沖區溢出攻擊。因此,許多現代編譯器和 C 標準庫已經不推薦使用 gets()
,并在 C11 中完全移除。
取而代之的是 fgets()
函數,它允許你指定接收輸入的最大字符數,從而避免了緩沖區溢出的風險。fgets()
函數的原型如下:
char *fgets(char *str, size_t size, FILE *stream);
其中:
str
是指向字符數組的指針,用于存儲讀取的文本。size
是 str
數組的大小(包括空終止符)。stream
是指向 FILE
對象的指針,通常指向標準輸入(stdin
)。為了確保代碼的兼容性,你可以根據目標平臺和編譯器的要求來決定使用 gets()
還是 fgets()
。如果你需要支持使用 gets()
的舊代碼,可以保留它,但要注意其潛在的安全風險。同時,建議在現代代碼中使用 fgets()
或其他更安全的替代方案。