c++ - 重载 >> 使用 istream

标签 c++ operator-overloading istream

所以我试图重载 >> 运算符,但在这种情况下,我得到了一个以空字符结尾的字符串。如何让用户只输入我动态分配的足够的字符 char[] 命名数据并分配它。我知道可能有一种方法可以制作一个非常大的临时 char[] 并使用 for 循环将它们复制进去,但我想在不制作非常大的 字符[]。我现在有这段代码,但我知道它不起作用,因为我的类(class)允许的长度被传入。

std::istream & operator>>(std::istream & is, String346 & objIn) {
        using std::istream;

        is >> objIn.data;

        return is;
    }

最佳答案

C++ 语言没有规定从技术上禁止用户为您的 char 数组“仅输入足够的字符”。可能有一些特定于操作系统的资源可供您使用,例如限制文本输入字段中的最大字符数,但这超出了 C++ 的范围。

std::istream 读取时,您的代码必须准备好处理不符合您标准的输入。抛出异常,在打印错误消息后退出程序,或者读取您可以接受的最大字符数并忽略多余的字符——以您认为有意义的任何方式。这完全取决于您。

关于c++ - 重载 >> 使用 istream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36525244/

相关文章:

c++ - 模板值特化

java - SWIG 和异常 : avoid using throw(Exception) in C++

c++ - 如何匹配环境不同的两个群体? C++

c++ - 重载输入流运算符>>用于从文件中读取对象

c++ - 如何使用 std::istream 读取 bool 值

c++ - 文件 * 和 istream : connect the two?

c++ - 模板标签的困惑

c++ - 重载 > 作为成员函数

c++ - 按位重载 OR ('|' ) 链接操作未按预期工作

c++ - CGAL 的 istream_iterator