Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::filebuf VS2015错误_C++_Visual Studio 2015 - Fatal编程技术网

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
指示失败。嗯。。。臭虫在哪里?