首页 > 编程知识 正文

求指针指向的数组长度,指针字符串长度

时间:2023-05-05 03:21:57 阅读:57481 作者:353

读写文件时,您可能希望直接跳转到文件中的某个位置并开始读写,必须将文件的读写指针指向该位置,然后进行读写。

ifstream和fstream类具有seekg成员函数,可以设置文件的读取指针位置。

ofstream和fstream类具有seekp成员函数,可以设置指向文件的写入指针的位置。

“位置”是指距离文件开头有多少字节。 文件的开头位置为0。

这两个函数的原型如下:

ostreamseekp(intoffset,int模式);

istreamseekg(intoffset,int mode );

mode表示文件读/写指针的设置模式,有三个选项:

ios:beg :将文件的读取指针或写入指针指向从文件开头向后的offset字节。 offset表示文件的开头。 在这种情况下,offset必须为负。

ios:cur :在此情况下,如果offset为负数,则从当前位置向文件开头方向移动offset字节,如果offset字节为正数,则从当前位置向文件末尾移动offset字节,如果offset字节为0,则不移动。

ios:end :让文件的读取指针(或写入指针)指示从文件末尾开始的|offset|(offset的绝对值)字节目标。 在这种情况下,offset必须为0或负数。

此外,还可以获得当前读/写指针的具体位置。

ifstream和fstream类还有tellg成员函数,它们返回文件读取指针的位置。

ofstream和fstream类还有一个tellp成员函数,返回指向文件的写入指针的位置。

这两个成员函数的原型如下:

int tellg (;

int tellp (;

要获取文件长度,请使用seekg函数将文件读取指针放置在文件末尾,然后使用tellg函数获取文件读取指针的位置。 这个位置就是文件长度。

例题:假设学生记录文件students.dat按名称排列。 编写程序,在students.dat文件中查找名为Jack的学生记录,并将其年龄更改为20。 (假设文件太大,无法全部读取到内存中。 步骤如下。

#包含

#包含

#包含

用户命名空间STD;

类事件

{

公共:

char szName[20];

int age;

(;

int main () )

{

CStudent s;

ftreamiofile(students.dat )、ios:in|ios:out ); //读写同时打开

if (! ioFile )

cout 'error ';

返回0;

}

iofile.seekg(0,ios:end; //将读取指针置于文件的末尾,

为了在//后的tellg中获取文件长度

int L=0,r; //L是折回搜索范围内第一条记录的编号

//R是折回搜索范围内最后一条记录的编号

R=ioFile.tellg ()/sizeof ) ) cstudent )- 1;

//第一个搜索范围中最后一条记录的编号为:条记录总数- 1

do {

intmid=(LR )/2; //将搜索范围中间的记录与要搜索的名称进行匹配

io file.seekg (mid * sizeof (cstudent )、ios:beg ); //定位于中间的记录

iofile.read((char* ) s,sizeof(s ) );

inttmp=strcmp(s.szname,' Jack ';

已找到if(tmp==0)//

s.age=20;

io file.seekp (mid * sizeof (cstudent )、ios:beg );

iofile.write((char* ) s,sizeof(s ) );

布雷克;

}

ELSEif(tmp0)//继续搜索到前一半

R=mid - 1;

持续寻找到else //后半部分

L=mid 1;

}while(L=R );

ioFile.close (;

返回0;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。