char someArray[n];
std::cin >> someArray; // potential buffer overrun
我经常在C ++论坛上看到如上所述的代码。是否有充分的理由不将其视为编译时错误?或者至少是警告?
答案 0 :(得分:4)
C(和C ++)的基本前提是编码员应该知道他们正在做什么。否则他们将在BASIC编码: - )
不允许出现错误,因为根据标准允许这样做,就像C中允许gets
和scanf("%s")
一样,尽管事实上它们是'等待发生的问题。
您发布的代码很糟糕,并且在严肃的软件中没有位置,但对玩具"它来说没什么问题。程序或测试事物。你只需要知道它的问题(听起来非常像你 意识到它们)。
答案 1 :(得分:0)
如果C ++一下子被发明了,它可能根本就不存在 - 如果你想读一个字符串,你必须把它读成std::string
,那个将是它的结束。
不幸的是,在std::string
标准化(或根本没有发明)之前,C ++已经使用了很长一段时间。在此期间发明了operator>>
和istream::getline
(不要误认为std::getline
)。当它们被发明时,很少(或没有)真正的替代品,所以他们使用char数组。
今天,当然,有一些替代方案,最好避免这些,除非你遇到一些不支持优秀替代品的古老编译器编写代码。