use*_*417 6 c++ pointers mysql-connector istream
接口/ C++的下面的函数部分,它返回一个istream*.如果我只是尝试打印它,它显示十六进制或内存位置,因为它的*类型.
istream *stream = res->getBlob(1);
Run Code Online (Sandbox Code Playgroud)
我试着阅读并打印出来:
string s;
while (getline(*stream, s))
cout << s << endl;
Run Code Online (Sandbox Code Playgroud)
但是这会因访问冲突而崩溃.我可以打印或转换为字符串的任何其他方式?
getline之前的stream值:
所以它似乎对我有效.如果失败,我认为它将为null或0
您可以std::istream使用其流缓冲区提取和打印a :
std::cout << in->rdbuf();
Run Code Online (Sandbox Code Playgroud)
当然,这将消耗输入,您可能无法再次获取它.如果要保留内容,可以std::ostringstream改为编写内容并使用该str()方法打印内容.或者,您也可以直接std::string从流构造一个,例如:
std::string content{ std::istreambuf_iterator<char>(*in),
std::istreambuf_iterator<char>() };
Run Code Online (Sandbox Code Playgroud)
顺便说一句,当你打印流指针时,你实际上使用了输出操作符void const*:它打印指针所指的地址.在C++ 03中,您甚至可以通过void*使用以下内容读取来恢复相应打印的指针std::istream:只要指向的对象未被删除,您就可以以这种方式返回指针!但是,在C++ 11中,禁止指针隐藏,以支持将来可能添加或不添加到语言中的可选垃圾收集.但是,关于非隐藏指针的保证也有助于成员调试器.