以下是代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
string infile(argv[1]);
ifstream fin(infile.data());
string var_name;
char ch = fin.get();
cout << ch << endl;
ch = fin.get();
cout << ch << endl;
ch = fin.get();
cout << ch << endl;
cout << "pos: " << fin.tellg() << endl;
fin.seekg(-sizeof(char),ios::cur);
cout << "pos: " << fin.tellg() << endl;
ch = fin.get();
cout << ch << endl;
return 0;
}
文件内容只是一个字符串:
<
?
x
m
,输出为:
<\n
?\n
x\n
pos: 3\n
pos: 2
x
为什么打印的最后一个字符仍然是'x'?为什么不搜索函数将文件指针移回一个字节?
答案 0 :(得分:3)
读取x后文件指针的位置为3 ,但x本身位于位置2(因为第一个字符位于0位置)。向后移动1个字符会将文件指针放在最近读取的字符上,这正是这里发生的事情。
如果你想在最后一个字符读取之前移动到字符,你需要搜索-2,而不是-1。
答案 1 :(得分:2)
如果您执行此操作,它将起作用:fin.seekg(-sizeof(char)-1,ios::cur);
注意:寻找文本文件中的任意位置是未定义的行为。见这里:How to read the 6th character from the end of the file - ifstream?