char someArray[n];
std::cin >> someArray; // potential buffer overrun
我在經常使用的C++論壇上看過類似上面的代碼。有沒有一個很好的理由不被視爲編譯時錯誤?或者至少是警告?爲什麼istream :: operator >>接受字符指針/數組?
char someArray[n];
std::cin >> someArray; // potential buffer overrun
我在經常使用的C++論壇上看過類似上面的代碼。有沒有一個很好的理由不被視爲編譯時錯誤?或者至少是警告?爲什麼istream :: operator >>接受字符指針/數組?
C(和C++)的底層前提是編碼員應該知道他們在做什麼。否則,他們會在BASIC :-)進行編碼
它是不允許的,因爲它是按照標準允許的,就像gets
和scanf("%s")
被允許在C中是一個錯誤,儘管他們是等待發生的問題。
您發佈的代碼是不好,在認真的軟件中沒有地方,但它對於「玩具」程序或測試的東西沒有問題。你只需要知道它的問題(這聽起來很像你是意識到他們)。
它可能是爲了使使用C風格的字符串更容易。 – Arafangion
如果C++已經被一舉發明,它可能根本不存在 - 如果你想讀一個字符串,你必須將它讀入std::string
,這將是結束了。
不幸的是,在std::string
被標準化(或根本沒有發明)之前,C++被使用了很長一段時間。在此期間發明了operator>>
和istream::getline
(不被誤認爲是std::getline
)。當他們被髮明時,幾乎沒有(或沒有)真正的替代品,所以他們使用char數組。
今天當然有其他選擇,最好避免這些,除非你用一些不支持高級替代品的古代編譯器寫代碼。
相關[Bjarne的報價和討論](http://programmers.stackexchange.com/q/92126/47504)。 – vvnraman
這是一個非問題,因爲無論如何你都不會在真正的C++中使用裸C數組。 –