2012-11-06 46 views
0
char someArray[n]; 
std::cin >> someArray; // potential buffer overrun 

我在經常使用的C++論壇上看過類似上面的代碼。有沒有一個很好的理由不被視爲編譯時錯誤?或者至少是警告?爲什麼istream :: operator >>接受字符指針/數組?

+0

相關[Bjarne的報價和討論](http://programmers.stackexchange.com/q/92126/47504)。 – vvnraman

+0

這是一個非問題,因爲無論如何你都不會在真正的C++中使用裸C數組。 –

回答

4

C(和C++)的底層前提是編碼員應該知道他們在做什麼。否則,他們會在BASIC :-)進行編碼

它是不允許的,因爲它是按照標準允許的,就像getsscanf("%s")被允許在C中是一個錯誤,儘管他們是等待發生的問題。

您發佈的代碼不好,在認真的軟件中沒有地方,但它對於「玩具」程序或測試的東西沒有問題。你只需要知道它的問題(這聽起來很像你意識到他們)。

+0

它可能是爲了使使用C風格的字符串更容易。 – Arafangion

0

如果C++已經被一舉發明,它可能根本不存在 - 如果你想讀一個字符串,你必須將它讀入std::string,這將是結束了。

不幸的是,在std::string被標準化(或根本沒有發明)之前,C++被使用了很長一段時間。在此期間發明了operator>>istream::getline(不被誤認爲是std::getline)。當他們被髮明時,幾乎沒有(或沒有)真正的替代品,所以他們使用char數組。

今天當然有其他選擇,最好避免這些,除非你用一些不支持高級替代品的古代編譯器寫代碼。

相關問題