首页 > 解决方案 > 如何在cin之后新建一个动态数组

问题描述

我正在尝试创建一个包含指针的类,它是动态数组的核心。如何重载运算符 >> 这样我就可以在不知道要放置多少个字符的情况下将 cin >> 指向指针?我在尝试:

#include <iostream>
class MyString
{
private:
    char* str;
    size_t length;

public:
    //some code here

    friend std::istream& operator>>(std::istream& is, const MyString& other)
    {
        is >> other.str;
        return is;
    }
}

这发生在我尝试输入字符串时: HEAP CORRUPTION DETECTED

有没有办法读取字符串,将其分配给我的字符串,并且不会使用 std::string 标头?(我试图创建一个不依赖于 std::string 的字符串类)

标签: c++operator-overloadingcindynamic-arraysistream

解决方案


一个简单的实现将用于is.get()一次检索一个字符,并将其附加到other,如果需要,可以调整大小。std::isspace(chr)当然,当是真的时停止。为此,您需要动态分配内存并跟踪在MyString.

这是它的骨架;您可能需要实现该append()方法。

friend std::istream& operator>>(std::istream& is, MyString& other) {
   while (true) {
      int chr = is.get();
      if (is.eof() || std::isspace(chr)) {
          break;
      }
      other.append((char)chr);
   }
   return is;
}

推荐阅读