这是我的功能,当我运行程序时崩溃了。我正在尝试打印出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;
答案 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;
}