重载>>使用istream

时间:2016-04-10 03:00:07

标签: c++ operator-overloading istream

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

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

        is >> objIn.data;

        return is;
    }

2 个答案:

答案 0 :(得分:2)

C ++语言不包含从技术角度禁止用户输入足够字符的条款#34;为您的char数组。可能有一些特定于操作系统的资源可用,例如限制文本输入字段中的最大字符数,但这些资源不在C ++范围内。

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

答案 1 :(得分:1)

std::istream::get()有一个重载,允许您限制输入的大小。你仍然需要以这种或那种方式处理剩余的输入。