C++标准I/O库中有两个名字:rdstate和rdbuf。我知道“state”和“buf”,但什么是“rd”?(PS:我相信我知道如何使用rdstate和rdbuf,不要教我)。 最佳答案 我认为它们代表“阅读”,类似于大多数人使用“getXXX”的方式。 关于c++-rd在rdstate和rdbuf中代表什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/14080153/
使用rdbuf将流复制到另一个流是一种众所周知的方法:#include#includeintmain(){std::ifstreamin{"/tmp/foo.txt"};std::cerr但是,当/tmp/foo.txt为空时,这会破坏(=设置错误位)我的cerr。因此,不会显示Done\n。这是为什么呢?使用G++/libstdc++/GNULinux和Clang++/libc++/OSX观察。 最佳答案 这似乎是定义的行为-参见例如http://en.cppreference.com/w/cpp/io/basic_ostream
谁能解释一下细微差别:ofstreamf("test.txt")std::stringstreams;s我主要使用.rdbuf()将字符串流推送到文件(因为它更有效),但是如果字符串流为空,那么文件流就会变坏......?这不傻吗?我觉得我不太明白... 最佳答案 如果无法从流缓冲区中提取任何字符,则“插入”流缓冲区的插入运算符会设置故障位-[ostream.inserters]/9:Ifthefunctioninsertsnocharacters,itcallssetstate(failbit)(whichmaythrowios_
这是我的简单代码:#includeintmain(){intfoo;std::cin.rdbuf(std::cout.rdbuf());std::cin>>foo;//what'llhappenatthisline?whateverI'llinputwillgotocout'sbufferthentofoo,right?}我在想上面的代码将设置cin的缓冲区到cout的缓冲区,所以当我输入一些数字时,它也会被输出。我想我对自己的程序感到困惑。谁能告诉我程序中发生了什么?此外,如果我在末尾再添加一行:std::cout,然后它打印随机数,这意味着foo永远不会得到输入。那么总体情况如何?
在试图弄清楚如何回答https://stackoverflow.com/questions/33601384/what-is-the-file-descriptor-of-linuxs-environments-standard-logging-stream时,我注意到一个链接ananswertoarelatedSOpost.我用g++4.8.4尝试了上面链接答案中的代码,但在程序终止之前出现了段错误。程序如下:#include#includeintmain(){std::ofstreamof("cout.txt");std::cout.rdbuf(of.rdbuf());std::c
我在这里看到了一个有用的开始:http://www.cs.technion.ac.il/~imaman/programs/teestream.html而且创建一个同时进入日志文件和日志文件的新流非常有用。但是,如果我尝试将clog重新定义为新流,则它不起作用,因为新流与clog具有相同的rdbuf(),因此以下内容无效:clog.rdbuf(myTee.rdbuf());那么我怎样才能修改tee类使其拥有自己的rdbuf()然后它可以成为clog的目标?谢谢。-威廉 最佳答案 如果你真的想继续为tee使用std::clog而不是将输
我有这个代码,intmain(){std::stringst;std::stringstreamss;ssstr():"str();std::cout给我这个输出ss.rdbuf()->str():hejhejmeddigss.rdbuf():hejmeddig但这是为什么呢?是因为ostreams对operator 最佳答案 ss.rdbuf()->str();返回所有缓冲区内容的拷贝。在做什么std::cout?查看说明basic_ostream&operator*sb);它从缓冲区逐个字符地读取并将它们写入ostream,直到
我试试下面的代码:ostringstreamoss;streambuf*psbuf,*backup;backup=oss.rdbuf();psbuf=cout.rdbuf();oss.rdbuf(psbuf);oss但不幸的是我得到了这个错误:error:toomanyargumentstofunctioncall,expected0,have1oss.rdbuf(backup);但是rdbuf有两个重载:get(1)basic_streambuf*rdbuf()const;set(2)basic_streambuf*rdbuf(basic_streambuf*sb);是的,我知道它说
作者介绍thiscode在标题Abuserroronmyplatform下#include#includeintmain(){std::ofstreamlog("oops.log");std::cout.rdbuf(log.rdbuf());std::cout字符串“Oops!\n”被打印到文件“oops.log”。代码没有恢复cout的streambuf,但是VS2010没有报运行时错误。 最佳答案 由于log和std::cout共享一个缓冲区,该缓冲区可能会被释放两次(一次是在log超出范围时,然后在程序终止时再一次)。这会导致
我有以下代码,它工作得很好(除了它很慢,但我不太在意)。将infile的全部内容写入outfile似乎并不直观。//Returns1iffailedand0ifsuccessfulintWriteFileContentsToNewFile(stringinFilename,stringoutFilename){ifstreaminfile(inFilename.c_str(),ios::binary);ofstreamoutfile(outFilename.c_str(),ios::binary);if(infile.is_open()&&outfile.is_open()&&infi