www.fltk.net > C++ sEEkg函数问题

C++ sEEkg函数问题

C++中seekg函数的功能是:设置输入文件流的文件流指针位置.函数原型: ostream& seekp( streampos pos ); ostream& seekp( streamoff off, ios::seek_dir dir ); istream& seekg( streampos pos ); istream& seekg( streamoff off, ios::seek_dir dir );函数参数 :pos:新的文件流指针位置值;off:需要偏移的值;dir:搜索的起始位置;dir参数用于对文件流指针的定位操作上,代表搜索的起始位置.

/* * seekg 对输入文件定位,有两个参数: * 第一个:表示偏移量,可正可负,正表示向后,负表示向前 * 第二个:偏移的基地址,可以是: * ios::beg 输入流的开始 * ios::cur 输入流的当前位置 * ios::end 输入流的结束 */#include <iostream>#

你那句不起作用是因为你参数没写对.aoutfile.seekp(2*sizeof(stud[0]),ios::end);这个已经到文件尾部了,不能往后面再移动了.只能往前移动.往前是负值.比如:aoutfile.seekp(-2*sizeof(stud[0]),ios::end);这下你试试.

我也是这学期刚学的c++,seekg用在读取文件的时候,seekg(offset,dir),offset是一个位移值,为long型,=0是当前,>0向后移,<0则向前移.dir有3个参数,ios::beg文件开头,ios::end文件结尾,ios::cur当前指针位置.你读取文件后,注意读的时候是ios::in,写是ios::out你在用seekg(10l,beg),表示文件开头向后移10个字节,在用cout<<tellg()显示位移后的位置.

#include <iostream>#include <fstream>#include <assert.h> using namespace std; int main() { ifstream ifs("file1.txt"); char ch; filebuf* pbuf = ifs.rdbuf(); while(ifs.get(ch)){}//ifs.seekg(0,ios::beg); //基地址为文件头,偏移量为0,于是定位在文件头

seekg()和tellp()都是c++定义的函数,用于对输入流指针的定位,我猜应该是seek pointer和tell pointer的缩写.

那要看是什么流了如果是文件流fstream,他们修改的是同个指针(文件指针).如果是字符流stringstream,它们就不是同一个.因为他们的seep或者tellp, seekg或tellg是缓冲区的指针.也就是streambuf的gptr()和pptr()的指针.所以在写stringstream的时候可以先写后读,而不用seekp来切换.

我来回答楼主所提问题:1、第一个问题原因是当textfile.size()为0时,代码textfile[textfile.size()-1]执行是不成功的,因为访问了非法的内存空间.2、第二个问题原因是当test.eof()返回真值时,test的错误标志被设置为eofbit,于是,后续所有针对test的操作都不能得到预期的结果,比如tellp、tellg、seekg、seekp等,因此,在进行其他针对test的操作前,需要清除该错误标志:test.clear()3、代码:textfile.~string();隐含了出错的可能,建议修改为:textfile.clear();

文件输入输出流中定位文件指针的,有两个重载版本basic_istream&amp; seekg(pos_type _Pos);basic_istream&amp; seekg(off_type _Off, ios_base::seekdir _Way);第一个是直接定位位置_Pos的,第二个是在_Way的基础上偏移_Off个偏移量的.所以你说的seekg(0)的意义就是直接把指针定位在文件首部.

1 ifstream 有个函数叫eofbit 你试试 我记得有.这个事判断文件到达结尾的函数.2 可以先获得文件大小,seekg前先判断跳的位置是否超出的文件的大小.

网站地图

All rights reserved Powered by www.fltk.net

copyright ©right 2010-2021。
www.fltk.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com