为什么istream :: operator>>接受char指针/数组?

时间:2012-11-06 02:23:57

标签: c++ arrays pointers char istream

char someArray[n];
std::cin >> someArray; // potential buffer overrun

我经常在C ++论坛上看到如上所述的代码。是否有充分的理由不将其视为编译时错误?或者至少是警告?

2 个答案:

答案 0 :(得分:4)

C(和C ++)的基本前提是编码员应该知道他们正在做什么。否则他们将在BASIC编码: - )

不允许出现错误,因为根据标准允许这样做,就像C中允许getsscanf("%s")一样,尽管事实上它们是'等待发生的问题。

您发布的代码很糟糕,并且在严肃的软件中没有位置,但对玩具"它来说没什么问题。程序或测试事物。你只需要知道它的问题(听起来非常像你 意识到它们)。

答案 1 :(得分:0)

如果C ++一下子被发明了,它可能根本就不存在 - 如果你想读一个字符串,你必须把它读成std::string,那个将是它的结束。

不幸的是,在std::string标准化(或根本没有发明)之前,C ++已经使用了很长一段时间。在此期间发明了operator>>istream::getline(不要误认为std::getline)。当它们被发明时,很少(或没有)真正的替代品,所以他们使用char数组。

今天,当然,有一些替代方案,最好避免这些,除非你遇到一些不支持优秀替代品的古老编译器编写代码。