如何重载 << 运算符以在 C++ 中打印数组的内容?
how do I overload the << operator to print the contents of an array in c++?
这是我的函数,当我运行程序时它崩溃了。我正在尝试打印出字符数组的内容。如何重载此运算符以打印出数组的内容而不会使程序崩溃?
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] != ' ')
{
out << obj.data[i];
i++;
}
return out;
如果你这样声明你的函数,你需要返回一些东西:
return out;
没有它,您将有未定义的行为,其可能的结果之一是程序崩溃。
请在学习时设置编译器以将警告视为错误。
只是一个小提示,正如 NathanOliver 对你说的那样,ostreams 已经设置为打印字符数组,只要它们是以 null 结尾的,所以只要obj.data
是以 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;
}
你想返回你的ostream
对象:
ostream& operator<< (ostream& out, MyString& obj) {
for (size_t i = 0; i < obj.size; ++i) {
out << obj.data[i] << " ";
}
return out;
}
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 呼叫运营商<<临时
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 过载输出<<用于类的运算符,以打印其中的元组
- 重载operator< & lt;作为会员打印
- 重载& lt; & lt;用于打印自定义异常的操作符
- 如何显示/打印字符串对象?cout & lt; & lt;Int工作,count <<字符串
- 什么会导致死亡<<变量& lt; & lt;“ t";当输出超过终端宽度时,打印空白而不是值