我对tellp
和seekg
函数有一些误解。例如,当我运行以下代码时。
#include <iostream>
#include <ostream>
#include <fstream>
using namespace std;
int main(){
string s("in Georgia we are friends to each other");
ofstream out("output.txt");
for (int i=0; i<s.length(); i++){
cout<<"file pointer"<<out.tellp();
out.put(s[i]);
cout << " " << s[i] << endl;
}
out.close();
return 0;
}
结果如下。
pointer 0
pointer 1 i
pointer2 n
pointer 3
pointer 4 -g
........
等等。据我所知,第一个指针0指针只是文件,然后指向字符串中的第一个字符,依此类推。
现在考虑以下代码。
#include <fstream>
using namespace std;
int main () {
long pos;
ofstream outfile;
outfile.open ("test.txt");
outfile.write ("This is an apple",16);
pos = outfile.tellp();
outfile.seekp (pos-7);
outfile.write (" sam",4);
outfile.close();
return 0;
}
结果是:
This is a sample
这一行pos = outfile.tellp();
,我认为如第一个例子中那样得到零。在这个片段中,outfile.seekp (pos-7)
是什么意思?指向-7或?
答案 0 :(得分:3)
答案 1 :(得分:2)
tellp给出了put指针的当前位置。
outfile.seekp (pos-7)
语句将put指针从其当前位置向后移动7个字节。
在你的例子中,它指向超出字符串“这是一个苹果”
如果你做pos-7,
它会转到存在'n'字母的位置。
它从那里覆盖字符串“sam”。
所以结果字符串变成“这是一个样本”