gpt4 book ai didi

c++ - tellp() 是否未在追加模式下定义?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:14:35 26 4
gpt4 key购买 nike

我正在试验 C++ 中的文件指针。在下面的代码中,获得的结果是 0、30、10 和 12。这意味着如果我们执行 seekp(),​​tellp() 不会在追加模式下给出正确的结果。我期待 tellp() 在 seekp() 和附加数据后给我 32。我知道在应用程序模式下,写入总是到最后,因此有这个疑问。结果是否意味着 tellp() 位置在追加模式下无关紧要?

h1.txt 文件的内容是:01234567891011121314151617181911,符合预期。

ofstream f1("h1.txt",ios::app|ios::out);
if (!f1)
{
cerr<<"cannot open the file\n";
exit(-1);
}
currentPos = f1.tellp();
cout<<"Initial Write Pointer Position = "<<currentPos<<endl;
// Write some data at the end
for(int index=0;index<20;index++)
{
f1<<index;
}

currentPos= f1.tellp();

cout<<"Write Pointer Position after write = "<<currentPos<<endl;
f1.seekp(10);
currentPos= f1.tellp();
cout<<"Write Pointer Position after seek = "<<currentPos<<endl;

/** Note: Even if you reposition pointer, in app mode, data will always be written to the end */
f1<<11;
currentPos= f1.tellp();

/** seekp does not match. In app mode, data is writtten to end */
cout<<"Final Write Pointer Position after seek and write = "<<currentPos<<endl;
f1.close();

最佳答案

Visual C++ 2015 编译的应用打印 0、30、10、32。

可能是您拥有的 C++ 标准库版本中的错误。您使用的是什么编译器?

关于c++ - tellp() 是否未在追加模式下定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48393195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com