为什么 istream::operator>> 接受字符指针/数组?
Why does istream::operator>> accept char pointers/arrays?
char someArray[n];
std::cin >> someArray; // potential buffer overrun
我在我经常访问的C++论坛上多次看到过上述代码。是否有充分的理由不将其视为编译时错误?或者至少是一个警告?
C(和C++)的一个基本前提是编码人员应该知道他们在做什么。否则他们会用 BASIC 编码:-)
它不允许成为错误,因为根据标准是允许的,就像 C 中允许gets
和scanf("%s")
一样,尽管它们是一个等待发生的问题。
你发布的代码很糟糕,在严肃的软件中没有地位,但对于"玩具"程序或测试东西来说,它很好。你只需要意识到它的问题(听起来你很清楚它们)。
如果C++都是一举发明的,它可能根本不存在——如果你想读一个字符串,你必须把它读成一个std::string
,这就是它的结束。
不幸的是,C++在标准化(或根本没有发明)之前已经使用了很长一段时间std::string
。operator>>
和istream::getline
(不要误认为是std::getline
)都是在那个时期发明的。当它们被发明时,几乎没有(或没有)真正的替代品,所以他们使用字符数组。
当然,今天有替代方案,最好避免这些,除非你遇到一些不支持高级替代方案的古老编译器编写代码的困境。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- ``这个''不能用this-&gt;指针变量