这是我的函数,当我运行程序时它崩溃了。我正在尝试打印出 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/