3 回答

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

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