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

Why does istream::operator>> accept char pointers/arrays?

本文关键字:gt 指针 字符 数组 istream 为什么 operator      更新时间:2023-10-16
char someArray[n];
std::cin >> someArray; // potential buffer overrun

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

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

它不允许成为错误,因为根据标准是允许的,就像 C 中允许getsscanf("%s")一样,尽管它们是一个等待发生的问题。

你发布的代码糟糕,在严肃的软件中没有地位,但对于"玩具"程序或测试东西来说,它很好。你只需要意识到它的问题(听起来你很清楚它们)。

如果C++都是一举发明的,它可能根本不存在——如果你想读一个字符串,你必须把它读成一个std::string,这就是它的结束。

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

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