3 回答

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

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