如何在 cin 之后新建一个动态数组

How to new a dynamic array after cin

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

#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;
    }
}

当我尝试 cin 一个字符串时发生了这种情况: HEAP CORRUPTION DETECTED

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

一种天真的实现会使用 is.get() 一次检索一个字符,并将其附加到 other,并根据需要调整大小。当然,当 std::isspace(chr) 为真时停止。为此,您需要动态分配内存并跟踪在 MyString.

的实现中您正在使用/可用的内存量 space

这是它的框架;您可能需要实施 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;
}
#include <iostream>
#include <string.h>
class MyString
{
private:
    size_t length;
    char* str;
    void getInput(std::istream&is)
    {
      char c='[=10=]';

      while(c!='\n')
      {
        is.get(c);
         length++;
        str=(char*)realloc(str, length);
        
        if(c=='\n')
        {
        str[length-1]='[=10=]';
        }
        else{
          str[length-1]=c;
        }
      }
    }

public:
    MyString()
    {
      length=0;
      str=new char[1];
      str[0]='[=10=]';
    }
    //some code here
    friend std::istream& operator>>(std::istream& is,  MyString& other)
    {
        std::cout<<"Enter String: ";
        other.getInput(is);
        return is;
    }

    void printString()
    {
      std::cout<<str<<std::endl;
    }

    ~MyString()
    {
      delete[]str;
      length=0;
    }
};

int main()
{
  MyString s;
  std::cin>>s;

  s.printString();
}