加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

C++ seekp()成员方法

发布时间:2023-06-14 13:22:21 所属栏目:语言 来源:
导读:seekp() 方法用于指定下一个进入输出缓冲区的字符所在的位置。

借助 tellp() 方法得知,最后一个 '/' 字符所在的位置是 29。此时如果继续向缓冲区中存入数据,则下一个字符所在的位置应该是 30,但借助 s
seekp() 方法用于指定下一个进入输出缓冲区的字符所在的位置。

借助 tellp() 方法得知,最后一个 '/' 字符所在的位置是 29。此时如果继续向缓冲区中存入数据,则下一个字符所在的位置应该是 30,但借助 seekp() 方法,我们可以手动指定下一个字符存放的位置。

比如通过 seekp() 指定下一个字符所在的位置为 23,即对应 "cplus/" 部分中字符 'c' 所在的位置。

显然,新的 "python/" 覆盖了原来的 "cplus/"。

seekp() 方法有如下 2 种语法格式:
//指定下一个字符存储的位置
ostream& seekp (streampos pos);
//通过偏移量间接指定下一个字符的存储位置   
ostream& seekp (streamoff off, ios_base::seekdir way);
其中,各个参数的含义如下:
pos:用于接收一个正整数;
off:用于指定相对于 way 位置的偏移量,其本质也是接收一个整数,可以是正数(代表正偏移)或者负数(代表负偏移);

模式标志    描 述
ios::beg    从文件头开始计算偏移量
ios::end    从文件末尾开始计算偏移量
ios::cur    从当前位置开始计算偏移量
同时,seekp() 方法会返回一个引用形式的 ostream 类对象,这意味着 seekp() 方法可以这样使用:
cout.seekp(23) << "当前位置为:" << cout.tellp();
举个例子:
#include <iostream> //cin 和 cout
#include <fstream> //文件输入输出流
using namespace std;
int main() {
    //定义一个文件输出流对象
    ofstream outfile;
    //打开 test.txt,等待接收数据
    outfile.open("test.txt");
    const char * str = "http://c.biancheng.net/cplus/";
    //将 str 字符串中的字符逐个输出到 test.txt 文件中,每个字符都会暂时存在输出流缓冲区中
    for (int i = 0; i < strlen(str); i++) {
        outfile.put(str[i]);
        //获取当前输出流
       
    }
    cout << "当前位置为:" << outfile.tellp() << endl;
    //调整新进入缓冲区字符的存储位置
    outfile.seekp(23);  //等价于:
                        //outfile.seekp(23, ios::beg);
                        //outfile.seekp(-6, ios::cur);
                        //outfile.seekp(-6, ios::end);
   
    cout << "新插入位置为:" << outfile.tellp() << endl;
    const char* newstr = "python/";
    outfile.write("python/", 7);
    //关闭文件之前,刷新 outfile 输出流缓冲区,使所有字符由缓冲区流入test.txt文件
    outfile.close();
    return 0;
}
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章