📜  C ++中的Tellg和Tellp之间的区别(1)

📅  最后修改于: 2023-12-03 14:59:37.120000             🧑  作者: Mango

C++中的Tellg和Tellp之间的区别

在C++中,有两个函数分别为tellg()tellp()。这两个函数是与输入输出流中的读写位置有关的,包含在<fstream><iostream>头文件中。下面是tellg()tellp()的详细介绍,以及它们之间的区别。

tellg()

tellg()函数返回输入流(如ifstream)中读取位置的当前位置。这个位置是相对于文件开头的字符位置。换句话说,它返回了输入流中下一个要读取的字符的位置。

以下是一个例子:

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ifstream input("example.txt");

    //输出当前读取位置
    cout << "Current read position: " << input.tellg() << endl;

    //读取一行文本
    string line;
    getline(input, line);

    //输出下一个要读取的字符的位置
    cout << "Next read position: " << input.tellg() << endl;

    input.close();
    return 0;
}

在这个例子中,首先输出了当前的读取位置(通常是0)。然后,读取了输入流中的一行文本,这会导致读取位置向前移动到文本的下一行的开头。最后,再次输出以显示下一个要读取的字符的位置。

tellp()

tellp()函数返回输出流(如ofstream)中写入位置的当前位置。这个位置是相对于文件开头的字符位置。换句话说,它返回了输出流中下一个要写入的字符的位置。

以下是一个例子:

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ofstream output("example.txt");

    //输出当前写入位置
    cout << "Current write position: " << output.tellp() << endl;

    //写入一行文本
    output << "Hello, world!" << endl;

    //输出下一个要写入的字符的位置
    cout << "Next write position: " << output.tellp() << endl;

    output.close();
    return 0;
}

在这个例子中,首先输出了当前的写入位置(通常是0)。然后,写入了一行文本,这会导致写入位置向前移动到文本所占的位置。最后,再次输出以显示下一个要写入的字符的位置。

区别

尽管tellg()tellp()都返回当前位置,但是它们之间还是有一些区别的。

tellg()用于输入流(如ifstream),主要获取读取位置的信息;而tellp()用于输出流(如ofstream),主要获取写入位置的信息。

此外,tellg()tellp()工作方式的差异也导致了它们返回的位置不同。在输入流中,tellg()返回下一个要读取的字符的位置。而在输出流中,tellp()返回下一个要写入的字符的位置。

因此,在C++中,当需要指定输入/输出流中的读取/写入位置时,需要使用seekg()/seekp()函数来设置这些位置。tellg()/tellp()函数可以帮助程序员了解当前读取/写入的位置,以确保在指定位置之前或之后进行操作。