jjzjj

c++ - 为什么要设置 failbit()?

创建一个文件并用零填充它:ddif=/dev/zeroof=/tmp/zeroescount=1编写这个小程序来提取它在文件中遇到的第一个无符号整数。#include#includeintmain(){std::ifstreamreader("/tmp/zeroes",std::ios_base::binary);uint32_tnumber;reader>>number;assert(!reader.fail());}为什么会触发断言? 最佳答案 因为/dev/zero提供二进制零,而不是字符'0',并且>>>执行(或尝试执行)文

c++ - 如何使用类似 `std::basic_istream<std::byte>` 的东西

本题旨在使用std::byte具有标准输入输出。是否有任何计划为read(_bytes)添加适当的函数重载?和write(_bytes)到basic_istream的接口(interface)和basic_ostream在未来的标准?有什么理由反对它?我知道CharT*-应保留过载。我可以做什么来使用std::byte?我目前在我的项目功能中定义std::istream&read(std::istream&,std::byte*,std::streamsize)std::ostream&write(std::ostream&,conststd::byte*,std::streamsiz

c++ - istream_iterator cin 初始化等待输入

我有这个代码片段。istream_iterator对象仅被定义而未被使用,因此我预计它不会执行任何操作并且应用程序会立即完成。但是当我运行应用程序时,在我提供一些输入之前它不会完成。为什么?我在ArchLinux上编译它:gcc4.7.1,命令:g++-std=c++11filename.cpp#include#includeusingnamespacestd;intmain(intargc,char*argv[]){istream_iteratorinput(cin);return0;} 最佳答案 按照标准,24.6.1.1ist

c++ - 当你有一个 std::string 时如何使用 basic_istream

我有一个使用basic_istream作为参数的函数,我有一个std::string和我需要传递给它的数据。我该怎么做? 最佳答案 您可以将字符串数据放入流中:std::stringx;std::stringstreamss(x);//putstringintostreamfunction_taking_stream(ss); 关于c++-当你有一个std::string时如何使用basic_istream,我们在StackOverflow上找到一个类似的问题:

c++ - 如何使用 libjpeg 从 std::istream 读取 JPEG?

libjpeg可以从FILE*或缓冲区中读取JPEG数据。我的数据来自std::istream。我可以将整个std::istream读入缓冲区以与libjpeg一起使用,但如果可能的话,我宁愿让libjpeg直接从std::istream中读取。如何做到这一点? 最佳答案 您只需要为您的istream提供包装器。定义一个结构体,例如structJpegStream{jpeg_source_mgrpub;std::istream*stream;bytebuffer[4096];}然后需要四种方法对流进行操作:voidinit_sour

C++:std::istream 检查 EOF 而不读取/消耗 token /使用运算符>>

我想测试std::istream是否已经到达结尾而不读取它。我知道我可以像这样检查EOF:if(is>>something)但这有一系列的问题。想象有许多(可能是虚拟的)方法/函数期望std::istream&作为参数传递。这意味着我必须做一些检查EOF的“家务”,可能使用不同类型的something变量,或者创建一些奇怪的包装器来处理调用输入法的情况.我需要做的就是:if(!IsEof(is))Input(is);IsEof方法应保证流不会因读取而改变,因此上面的行等同于:Input(is)关于在Input方法中读取的数据。如果没有通用的解决方案来表示和std::istream,有没

c++ - 在 istream 上用 << 读取固定数量的字符

我在C++中尝试了一些文件读取策略,我遇到了这个问题。ifstreamifsw1("c:\\trys\\str3.txt");charifsw1w[3];do{ifsw1>>ifsw1w;if(ifsw1.eof())break;cout文件的内容是firstfirstfirstsecondsecondfirstsecondsecond当我看到输出时,它被打印为firstfirstfirstsecondsecondfirst我希望输出是这样的:firstfirstfi.....而且我看到没有打印“secondsecond”。估计是上次read遇到了eof,cout可能还没有执行。但是第

c++ - 使用运算符将​​字符串流传递给 istream >>

我正在尝试将字符串流传递到一个对象(类)中,该对象(类)具有已声明和定义的重载提取运算符>>>。例如,object1中重载的提取运算符的声明是friendistream&operator>>(istream&in,Object1&input);在object2中,我的声明几乎一样friendistream&operator>>(istream&in,Object2&input);在object1提取函数期间,func.获取一行,将其转换为字符串流并尝试使用Object2的提取(>>)运算符。istream&operator>>(istream&in,Object1&input){Obj

c++ - istream::tellg() 在与我的自定义 streambuf 类一起使用时返回 -1?

我正在尝试创建一个直接从原始内存缓冲区读取的istream。我在这里的另一篇文章中找到了一个很好的方法来做到这一点:classmembuf:publicbasic_streambuf{public:membuf(char*p,size_tn){setg(p,p,p+n);}};然后我使用这个membuf创建我的istream:membufmb(dataPointer,dataLength);istreamreader(&mb);然后我使用getline()和>>>运算符阅读,一切都很棒。但是,我似乎无法使用seekg()返回缓冲区的开头,并且istream::tellg()总是返回-1

c++ - 类似 istream::getline() 的东西,但有替代的 delim 字符?

获得istream::getline(string,256,'\n'OR';')效果的最简洁方法是什么?我知道编写循环非常简单,但我觉得我可能遗漏了一些东西。我是吗?我用过的:while((is.peek()!='\n')&&(is.peek()!=';'))stringstream.put(is.get()); 最佳答案 不幸的是,没有办法有多个“行尾”。您可以做的是阅读该行,例如std::getline并将其放入std::istringstream并使用std::getline(使用';'分隔符)在istringstream的循