如何重载<< operator用c ++打印数组的内容?

时间:2017-07-18 20:06:31

标签: 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;

2 个答案:

答案 0 :(得分:0)

如果你宣布你的功能,你需要返回一些东西:

return out;

没有它,你有未定义的行为,其中一个可能的结果是程序崩溃。

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

正如NathanOliver对你说的那样,只要它们被空终止,ostreams就已经设置为打印字符数组了,所以只要obj.data是一个以空字符结尾的字符串,你就可以这样做:

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

答案 1 :(得分:0)

您想要返回ostream对象:

ostream& operator<< (ostream& out, MyString& obj) {
    for (size_t i = 0; i < obj.size; ++i) {
        out << obj.data[i] << " ";
    }
    return out;
}