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