为什么即使我没有使用 ostream 对象,ostream 的 put 指针也会被修改
why ostream's put pointer is modified even if i did not use ostream object
我的程序中有以下代码。IoFile.out的行数很少。
int main()
{
ifstream inFile("Iofile.out", ios::in|ios::out);
ostream outStream(inFile.rdbuf());
cout << "tellp outStream " << outStream.tellp() << endl; // tellp outStream 0
cout << "tellg inFile " << inFile.tellg() << endl; // tellg inFile 0
cout << inFile.rdbuf(); // Print whole file
cout << "tellp outStream " << outStream.tellp() << endl; // tellp outStream 21
cout << "tellg inFile " << inFile.tellg() << endl; // tellg inFile 21
return 0;
}
tellp和tellg的输出如注释所示。我的查询是,当我将文件内容写入cout时,我只希望streambuf的读取指针(即tellg(移动到文件的末尾。但在这种情况下,我看到outStream的put指针也被移到了文件的末尾。为什么会这样?为什么将文件打印到cout会导致outStream的put指针发生更改?
不能打开ifstream
进行写入。如果你想同时阅读&写访问,使用fstream
。
您打印了整个文件,对吗?您可以在ostream构造函数中使用streambuffer指针。然后打印数据(这会移动指针((ostream有一个引用(并获取指针的位置(移动后(你的字符串有多少个字符?(21?(您在打印rdbuf((时移动了指针。我认为这是因为它内部对指针使用了算术运算
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- Ostream操作员Strangley不接受我的堆栈指针
- 无法使用 istream 和 ostream 指针跨 Linux 管道写入
- 使用指针数组中的对象调用重载的友元 ostream 插入运算符将返回内存地址
- 没有合适的默认构造函数可用于初始化 ostream 指针
- C++:无法在ostream和运算符<<中创建节点指针
- 正在获取ostream模板以打印指针列表中的实例属性
- 地址和指针的 ostream 运算符<<
- 为什么即使我没有使用 ostream 对象,ostream 的 put 指针也会被修改
- 如何获得std::ostream的指针.编写序列化
- 如何在课堂上使用指向ostream的指针
- istream >> ostream << 运算符重载与 * 指针
- 将指向 istream 和 ostream 的指针存储在类C++中