C++ 在c+中创建iostream对象+;
我想再问一次,但比上次好多了 我有一个程序,从不同的地方读取二进制数据,然后在我编写的类中对其进行操作。数据最初将从其源(可能会有所不同)读取,然后写入流,该流将被传递到类中供类处理 我的难题是如何创建一个C++ 在c+中创建iostream对象+;,c++,stream,iostream,C++,Stream,Iostream,我想再问一次,但比上次好多了 我有一个程序,从不同的地方读取二进制数据,然后在我编写的类中对其进行操作。数据最初将从其源(可能会有所不同)读取,然后写入流,该流将被传递到类中供类处理 我的难题是如何创建一个iostream并对其进行写入/读取。我已经查看了很多地方,并阅读了中的参考资料,但是我找不到一个简单的例子来说明如何创建iostream 根据我读到的内容,以下是我尝试的: #include <iostream> using namespace std; int main(
iostream
并对其进行写入/读取。我已经查看了很多地方,并阅读了中的参考资料,但是我找不到一个简单的例子来说明如何创建iostream
根据我读到的内容,以下是我尝试的:
#include <iostream>
using namespace std;
int main(){
streambuf* sb;
iostream s(sb);
s.put('h'); //segfault
}
关键是我需要流知道它何时为空,并在该点返回一个特殊值。我不能使用stringstream
,因为二进制数据可能包含不用于终止数据的空字符
如果
iostream
是错误的方法,请告诉我一个更好的选择。stringstream
正是您想要的。C++字符串可以包含嵌入的空字符(<代码> 0)/代码>。如果你不相信我
iostream
实际上是一个抽象基类,本身没有真正的功能。您不应该直接创建iostream
的实例。我建议您获得a,而不是尝试从随机网站上从头开始学习该语言。你应该取得更大的成功!你是对的,这是一个假设,所以道歉。但是上面的代码似乎有一些基本错误,比如将未初始化的指针作为参数传递给构造函数……你是对的。空字符的问题不是stringstream
认为它已经结束了,而是while(s.peek())
的测试没有正常工作。你能推荐执行此测试的正确方法吗?@ewok我建议while(s.peek()!=EOF)
。您还可以在peek操作后测试s.eof()
或s.bad()
等,以了解更多具体信息。它告诉我eof
未声明。并且使用s.eof()
永远不会结束。@我想您必须#包括。@ewok是的,如果输入字符串包含嵌入的空值,您需要显式指定其长度。当给出了 char const */COD>没有长度时,C++字符串类将使用null终止测试找到长度。如果您自己指定长度,则跳过此测试。
void printByN(iostream s, n){
while (s.peek() != eof()){ // I'm not sure this is correct. need help with that too
char buf [n];
s.read(&buf, n);
cout << buf << endl;
}
}
int main(){
//create iostream s;
char* buf = "hello there my friend";
s.write(buf, strlen(buf));
}