3 回答

TA貢獻1831條經驗 獲得超10個贊
絕不可能
使用 gets
..它不提供針對緩沖區溢出漏洞的保護(也就是說,您不能告訴它您傳遞給它的緩沖區有多大,因此它不能阻止用戶進入大于緩沖區的行并破壞內存)。 避免使用 scanf
..如果不小心使用,它可能會出現與以下相同的緩沖區溢出問題: gets
..即使忽略了這一點, 它還有其他問題,使它很難正確使用。.通常您應該使用 fgets
相反,盡管有時很不方便(您必須去掉換行符,您必須提前確定緩沖區大小,然后您必須弄清楚如何處理太長的行-您是否保留了所讀的部分和 丟棄多余的,丟棄整件事,動態增長緩沖區,然后再試一次,等等)。有一些非標準的函數可以為您執行這種動態分配。 getline
關于POSIX系統, 查克·法爾科納的公共領域 ggets
職能)。請注意 ggets
有 gets
-就像語義學一樣,它為你剝去了一個尾隨的換行符。

TA貢獻1793條經驗 獲得超6個贊
gets
. fgets
fgets
fscanf
"%N[^\n]"
fgets
strtok(buffer, "\n");
strtok
- 3 回答
- 0 關注
- 342 瀏覽
添加回答
舉報