- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用这段代码,我从文件中读取了一个字符串。
pbuf = infile.rdbuf();
size = pbuf->pubseekoff(0, ios::end, ios::in);
pbuf->pubseekpos (0,ios::in);
buf = new char[size];
pbuf->sgetn(buf, size);
str.assign(buf, buf+size);
我必须读取临时变量 char* buff
中的数据,因为 sgetn 需要 char*
而不是 string
。
所以在问我实际问题之前,如果有人知道从可能包含空白字符的文件中读取字符串的更好方法,请告诉我(直到 eof 才循环)。
文件内容为:
呜呜呜
blah blah 换行
但我得到的是:
呜呜呜
blah blah换行═
我发现随着我添加更多 \n
字符,奇怪字符的数量增加了。似乎当我尝试获取文件大小时,每个 \n
字符占用 2 个字节的空间,但在字符串中它只占用 1 个字节,因此我的字符串看起来很奇怪。我该如何避免这种情况?
最佳答案
在 Windows 上,文本文件中行尾的表示是两个字节:0x0d、0x0a。当您使用文本模式读取此类文件时,这两个字节会被转换为单个字符“\n”。当您使用二进制模式时,您正在读取原始字节,它们不会为您翻译。如果您不想要它们,则必须自己进行翻译。
关于c++ - rdbuf() 读取垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634255/
#include #include #include using namespace std; int main() { ofstream fout("test.txt"); f
我想报告一个错误的解决方案在 Mac OS X El Capitan 版本 10.11.2 中安装 OpenFOAM 3.0.1 时得到错误是: "error: member reference ty
有没有人有一个例子来说明如何重新定义 C++ 内置的 clog,而不是有一个新的关联 rdbuf(),它被处理为原始 clog.rdbuf() 和 ofstream 对象的 rdbuf() 的三通到磁
使用这段代码,我从文件中读取了一个字符串。 pbuf = infile.rdbuf(); size = pbuf->pubseekoff(0, ios::end, ios::in); pbuf->pu
我试图通过简单地使用 rdbuf() 将两个文件合并为一个文件,但是在合并时,文件的第一行丢失了。代码如下: void mergeFiles(ifstream &file1, ifstream &fi
我有一个单元测试,它通过读取函数发送的缓冲区来验证函数: template void print_manifold(Manifold const& manifold) try { std::co
我正在尝试将文件内容复制到缓冲区。 std::ifstream fp(myFile, std::ios::binary) fp.seekg(0, fp.end); // set cursor at t
在下面的例子中, ifstream myFile; myFile.open("example.txt", ios::binary); cout << myFile.rdbuf() << endl; m
我正在尝试了解 IO 流的结构。 从 cppreference std::basic_stringstream::str 开始: Manages the contents of the underly
使用 rdbuf 将流复制到另一个流是一种众所周知的方法: #include #include int main() { std::ifstream in{"/tmp/foo.txt"};
这是我的简单代码: #include int main() { int foo; std::cin.rdbuf(std::cout.rdbuf()); std::cin>>f
提出以下问题的用户很快就接受了“读取缓冲区”: What does rd stand for in rdstate and rdbuf? 我仍然想知道“读取缓冲区”在“std::ostream”(co
我试试下面的代码: ostringstream oss; streambuf *psbuf, *backup; backup = oss.rdbuf(); psbuf = cout.rdbuf
比方说,我有几个数字的文件 input.txt 1 2 4 51 3 77 现在,我正在尝试执行这个命令: `string filename="input.txt"; ifstream ifs
有一个STL 库函数 streambuf* std::basic_ios::rdbuf (streambuf* sb); 此函数可用于更改与流关联的流缓冲区。如果您使用它,它会返回一个指向先前使用的
此代码的目的是支持通过 ./a.out 2) { in.open(argv[1]); } istream & input = (argc > 2 ? in : cin); string li
我有以下代码,它工作得很好(除了它很慢,但我不太在意)。将 infile 的全部内容写入 outfile 似乎并不直观。 // Returns 1 if failed and 0 if success
ofstream ofs1("file1.dat", ios::out | ios::binary); unsigned char data[64] = {0}; ofs1.write((char*)
是否可以在使用 .rdbuf() 函数将缓冲区推送到另一个流 stream 后重用字符串流 s? 我重建了环境: http://ideone.com/JoPJ1E #include using na
我正在尝试使用 pubsetbuf 方法修改 stringstream 对象的 stringbuffer 而不必复制字符串,但它不起作用。我正在关注 http://www.cplusplus.com/
我是一名优秀的程序员,十分优秀!