2012-12-23 35 views
-7

爲什麼C標準包含許多不安全的功能,這些功能是無用的(在他們不使用的良好程序中)並且是有害的,例如getchar?爲什麼C標準不包含它們的有用功能,例如getchgetche?它只是衆多例子中的一個......爲什麼C標準包含許多不安全的功能,而這些功能是無用的?

UPD 我很困惑:gets而不是getchar

+6

這有什麼錯'的getchar()'? – qrdl

+0

因爲輸入/輸出緩衝區與C無關,所以每個操作系統都實現它。 –

+2

聽起來像另一個人抱怨他的上司不完美。 C可以說是有史以來最成功的語言。 – duffymo

回答

10

你的意思是gets?不要破壞舊程序。過時的道路很漫長。 而且,已棄用

+0

但是爲什麼不添加'getch'和'getche'?他們阻礙誰?爲什麼要自己拉尾痛?爲什麼不切斷它? –

+6

@Bush:有很多很好的理由不添加它們。一個是,許多歷史體系具有完全不同的事物的相同名稱的功能;試圖將其中一個標準化將是其他人無法接受的。另一個原因是這些功能與stdio完全不同。例如,curses'getch'函數與curses鍵代碼一起使用,而不是字符,並且與stdio緩衝不兼容。 –

+0

>你的意思是得到? @Carl Norum是的,我很抱歉,我與'gets'混淆。 –

1

您不能在電傳打字機(終端看起來像打字機)上實現getch()[無緩衝讀取]。或者任何類型的數據存儲在終端中的終端,直到您輸入。

有些功能可以做這種事情,但要記住C是一種應該「在任何事情上運行」的語言。

gets是很多年前的標準庫的一部分,所以它必須保留 - 否則舊代碼將無法編譯,並且很多人喜歡使用舊代碼(因爲它需要很多工作來修復1000000行雜亂的代碼,曾經工作!)

2

gets已棄用在C99中,並已刪除在C11

C11(ISO/IEC 9899:201X)前進/ 6

取出得到()函數

+0

謝謝,這很有趣。 –