c++ - 如何重载 << 运算符以在 C++ 中打印数组的内容?

标签 c++

这是我的函数,当我运行程序时它崩溃了。我正在尝试打印出 char 数组的内容。如何重载此运算符以在不导致程序崩溃的情况下打印出数组的内容?

ostream& operator<< (ostream& out, MyString& obj){

  //print out mystring contents

  int i = 0;
  while(i < obj.size)
  {
      out << obj.data[i];
      i++;
  }
}

这是我的数据成员:

int size;
int capacity;
char *data;

我做了以下修改,但它仍然崩溃:

int i = 0;
    while(obj.data[i] != '\0')
    {
        out << obj.data[i];
        i++;
    }

    return out;

最佳答案

如果你这样声明你的函数,你需要返回一些东西:

return out;

没有它,您就会有未定义的行为,一种可能的结果是程序崩溃。

请在学习过程中将编译器设置为将警告视为错误。

只是一个小提示,正如 NathanOliver 对您所说的那样,只要 obj.data 是一个以 null 结尾的字符串,ostreams 已经设置为打印字符数组,只要它们以 null 结尾,你可以这样做:

ostream& operator<< (ostream& out, MyString& obj){

  //print out mystring contents
  if (obj.data != nullptr) // you might need this test, you might not, depending on the internal logic of MyString
    out << obj.data;

  return out;
}

关于c++ - 如何重载 << 运算符以在 C++ 中打印数组的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45176095/

相关文章:

c++ - 将 std::vector<bool> 传递给外部函数

C++:对象已删除(用 new 创建)但成员函数仍在工作(?)

c++ - 简单的字符串比较如何导致 OleException?

c++ - 对相同基类的引用必须在内存中具有单独的偏移量

c++ - 结构内重载运算符的调用约定?

c++ - SFINAE 只有在可能的情况下才有类(class)成员

c++ - const std::map<boost::tuples::tuple, std::string>?

c++ - 我正在尝试递归地实现一个程序。我只是不明白为什么我的最后一行被执行了两次

c++ - Facebook 如何处理他们的数据库信息?

C++11 - move 语义在构造上很慢