Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中创建iostream对象+;_C++_Stream_Iostream - Fatal编程技术网

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