C++ std::filebuf VS2015错误
代码如下:C++ std::filebuf VS2015错误,c++,visual-studio-2015,C++,Visual Studio 2015,代码如下: #include <iostream> #include <fstream> #include <string> int main() { { std::filebuf f; f.open("test.txt", std::ios::in | std::ios::out | std::ios::trunc); for (uint8_t ch = '0'; ch < '7'; ch++)
#include <iostream>
#include <fstream>
#include <string>
int main()
{
{
std::filebuf f;
f.open("test.txt", std::ios::in | std::ios::out | std::ios::trunc);
for (uint8_t ch = '0'; ch < '7'; ch++) {
f.sputc(ch);
}
}
{
std::filebuf f;
f.open("test.txt", std::ios::in | std::ios::out);
for (uint8_t ch = '0'; ch < '7'; ch++) {
f.sbumpc();
}
for (uint8_t ch = '7'; ch < '9'; ch++) {
f.sputc(ch);
}
}
{
std::ifstream f("test.txt");
std::string line;
std::getline(f, line);
std::cout << line << std::endl;
}
}
输出是
0123456
而不是:
012345678
我试图报告上的错误,但我得到:
You are not authorized to submit the feedback for this connection.
是否有人知道我可以写入报告错误的电子邮件地址?标准库文件流是根据C
文件流定义的:
[fstreams]/2
对读写一个由计算机控制的序列的限制
类的对象basic\u filebuf
与
使用标准C库文件
s进行读写
当您打开一个流进行读写时,库的作用就像它在更新模式(+
)下打开了一个文件一样
从C标准中我们可以看到
7.21.5.3/7
以更新模式(“+”
作为第二或第三种模式)打开文件时
上述模式参数值列表中的字符),输入和
可以在相关联的流上执行输出。然而,产出
在没有中间调用的情况下,不得直接跟随输入
fflush
功能或文件定位功能(fseek
,
fsetpos
,或倒带
),且输入后不得直接跟随
无需调用文件定位函数即可输出,
除非输入操作遇到文件结尾。
也就是说,除非您已经到达文件的末尾(此处没有),您只能读取到并包括最后一个字符,否则您不能在不查找的情况下以写跟随读操作
在写入之前,您必须寻找put位置,或者最后一次读取流以到达末尾,例如
f.pubseekoff(0, std::ios_base::cur);
但是,上面的内容不适用于最新的VC++库,这实际上可能是一个bug。寻找结束或开始的过程与预期一样有效。标准库文件流是根据C文件流定义的:
[fstreams]/2
对读写一个由计算机控制的序列的限制
类的对象basic\u filebuf
与
使用标准C库文件
s进行读写
当您打开一个流进行读写时,库的作用就像它在更新模式(+
)下打开了一个文件一样
从C标准中我们可以看到
7.21.5.3/7
以更新模式(“+”
作为第二或第三种模式)打开文件时
上述模式参数值列表中的字符),输入和
可以在相关联的流上执行输出。然而,产出
在没有中间调用的情况下,不得直接跟随输入
fflush
功能或文件定位功能(fseek
,
fsetpos
,或倒带
),且输入后不得直接跟随
无需调用文件定位函数即可输出,
除非输入操作遇到文件结尾。
也就是说,除非您已经到达文件的末尾(此处没有),您只能读取到并包括最后一个字符,否则您不能在不查找的情况下以写跟随读操作
在写入之前,您必须寻找put位置,或者最后一次读取流以到达末尾,例如
f.pubseekoff(0, std::ios_base::cur);
但是,上面的内容不适用于最新的VC++库,这实际上可能是一个bug。寻找结束或开始的过程与预期一样有效。f.sputc(ch)
返回-1
表示失败。嗯。。。错误在哪里?f.sputc(ch)
返回-1
指示失败。嗯。。。臭虫在哪里?