草庐IT

iostream

全部标签

c++ - 输出缓冲区不会刷新的情况?

我正在学习iostream对象和刷新缓冲区。我知道何时保证刷新输出缓冲区以及如何显式刷新缓冲区。但是,我从未见过输出缓冲区未刷新的情况。在我看来,即使我不使用诸如endl、flush和ends之类的操纵器,输出缓冲区也会在每个语句的末尾刷新>.那么,有没有输出缓冲区不会(或者至少,可能经常不会)被刷新的简单示例?我觉得我需要看到这样的案例才能真正理解输出缓冲区。 最佳答案 取决于系统。以下面的程序为例:#include#ifdefWIN32#include#definesleep(n)Sleep((n)*1000)#else#inc

c++ - 如何将 basic_filebuf 与 char 以外的元素类型一起使用?

假设我想使用basic_filebuf读取文件的内容。我有一个名为boost::uintmax_t的类型,它的大小为8字节。我正在尝试编写以下内容:typedefbasic_filebuffile;typedefistreambuf_iteratorifile;filef;vectordata,buf(2);f.open("test.txt",std::ios::in|std::ios::binary);f.pubsetbuf(&buf[0],1024);ifilestart(&f),end;while(start!=end){data.push_back(*start);start+

c++ - 将数据序列化到 std::streambuf

我有一个VisualStudio2008C++项目,我在其中尝试将来自多个类的数据序列化为自定义std::streambuf实现。数据类及其序列化:structHeader{/*...*/};inlinestd::ostream&operatorstreambuffer实现提供缓冲的i/o并覆盖underflow和overflow。classMyStreamBuf:publicstd::streambuf{public:MyStreamBuf(){InitBuffers();};private:voidInitBuffers(){recv_buffer_.resize(buff_siz

c++ - 使用流读取复杂结构

考虑我有以下“一对float”对象输入格式:(第一个变量,第二个变量)例如(1.0,15.6).阅读此类结构的最佳方式是什么?在C中,我会使用scanf("(%f,%f)",&var1,&var2)-非常好,不是吗?(​​是的,我知道它不提供类型安全等等)但我只知道一种使用C++流的方法:floatvar1,var2;chartmp;cin>>tmp;cin>>var1;cin>>tmp;cin>>var2;cin>>tmp;看起来很丑,就是一对花车而已。那么,有没有一种优雅的方法可以做到这一点?喜欢cin>>"(">>var1>>",">>var2>>")";

c++ - 来自 file_descriptor_source (boost::iostreams) 或文件的 istream

我需要为程序的输入做这样的事情:streaminput;if(decompressed)input.open(filepath);else{file_descriptor=_popen("decompressor"+filepath,"r");input.open(file_descriptor);}input.read(...)...我可以看到一种解决方案-在这两种情况下都使用_popen,如果文件已经解压,则将文件复制到标准输出,但这看起来不是很优雅。有趣的是,与C相比这有多么困难-我猜标准库错过了它。现在我迷失在神秘的boost::iostreams文档中。如果有人知道如何操作,

c++ - 不稳定的行为

我是C++的新手。小代码示例如下:intmain(intargc,char*argv[]){charch1;intint1;cin>>ch1;cin>>int1;cout当我运行程序并输入以下内容时:az我得到的输出是:a32767我理解“a”,但为什么整数值是32767?我只是想测试看看如果我使用“z”而不是分配给int1的数值会发生什么。我尝试输入:ax...我也得到了相同的结果。现在如果我使用shortint1而不是intint1并使用输入运行程序:az我得到输出:a0附言sizeof(int)=4sizeof(short)=2我使用的是64位机器。

C++ iostreams问题

我现在正在研究boost::iostreams我正在寻找一种方法来创建一个迭代某些container的流.现在我有适用于std::vector的代码,但它仅为它做,因为我写了std::vector-特定代码。我正在做以下事情:templatevoidLoad(Object&object,constContainer&container){usingnamespaceboost::iostreams;//Createastreamthatiteratesovervectoranduseitin//thefollowingprocedureLoadImpl(object,stream(&c

c++ - 如何禁用 std::cerr?

我得到了一个包含很多std::cerr的程序,它直接输出到我的终端。我想知道std::cerr和std::cout之间有什么区别。以及如何禁用std::cerr(我不希望它输出到我的屏幕)? 最佳答案 正如其他人所提到的,如果这是一个类Unix系统,那么2>/dev/null会将stderr(2)重定向到天空中的bigbitbucket(/dev/null)。但是这里没有人解释stderr和stdout之间的区别,所以我觉得有义务至少谈谈这个话题。std::cout是标准输出流。这通常是您的程序应该输出消息的地方。std::cerr

c++ - << s.str() 和 << s.rdbuf() 之间的区别

谁能解释一下细微差别:ofstreamf("test.txt")std::stringstreams;s我主要使用.rdbuf()将字符串流推送到文件(因为它更有效),但是如果字符串流为空,那么文件流就会变坏......?这不傻吗?我觉得我不太明白... 最佳答案 如果无法从流缓冲区中提取任何字符,则“插入”流缓冲区的插入运算符会设置故障位-[ostream.inserters]/9:Ifthefunctioninsertsnocharacters,itcallssetstate(failbit)(whichmaythrowios_

c++ - 在 C++ 中查找大于 4GB 的文件?

这个问题在这里已经有了答案:Readingfileslargerthan4GBusingc++stl(5个答案)关闭7年前。我正在使用MSVisualStudio2012编译器并在x64Release模式下构建。使用ifstream我可以读取大于4GB的文件。问题是,我无法定位到10GB文件的中间位置。当我像这样使用seekg时is.seekg(5368709120,is.beg);然后is.tellg();返回-1,这意味着搜索失败。我确定该文件存在并且位置5368709120也存在。如果我使用它,它工作得很好:例如is.seekg(100,is.beg);。使用多次搜索不是一种选择