fseekC语言 fseek(fp,offset,SEEK_SET)什么意思
fseek 时间:2021-06-19 阅读:(
)
fseek()函数
fseek最后一个参数最好不要直接指定一个数值,比如1,
要使用SEEK_CUR,SEEK_END,SEEK_SET
第二个参数表示相对于第三个参数的偏移,整数表示正向偏移,负数表示负向偏移,比如
fseek(fp,-size,SEEK_CUR);
从当前位置向文件后方(比如文件有123三个数字,那么2在三的后方,3在2的前方)
fseek(fp,size,SEEK_SET);
从文件开始位置向前移动size
这里默认size是正数fseek函数
是的
int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。
如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。
如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
实验得出,超出文件末尾位置,还是返回0。
往回偏移超出首位置,返回-1,且指向一个-1的位置,请小心使用。
fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。
fseek函数是怎么用的?
fseek函数用于重定位流(数据流/文件)上的文件内部位置指针。
函数原型int fseek(FILE *stream, long offset, int fromwhere);
参数:
stream为文件流的指针
offset 偏移量
fromwhere 起始位置
具体功能:如果执行成功,stream将指向以fromwhere(起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。
如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
返回值:
成功,返回0,失败返回-1,并设置errno的值,可以用perror()函数输出错误。
实例:
#include <stdio.h>
long filesize(FILE*stream);
int main(void)
{
FILE *stream;
stream=fopen("MYFILE.TXT","w+");
fprintf(stream,"This is a test");
printf("File size of MYFILE.TXT is %ld bytes
",filesize(stream));
fclose(stream);
return 0;
}
long filesize(FILE*stream)
{
long curpos,length;
curpos=ftell(stream);
fseek(stream,0L,SEEK_END);
length=ftell(stream);
fseek(stream,curpos,SEEK_SET);
return length;
}c++怎么用fseek函数定位
函数名: fseek
功 能: 是把文件指针指向文件的开头,需要包含头文件stdio.h
用 法: int fseek(FILE *stream, long offset, int fromwhere);
描 述: 函数设置文件指针stream的位置。
如果执行成功,stream将指向以fromwhere为基准,偏移offset个字 节的位置。
如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
返回值: 成功,返回0,否则返回其他值。
fseek position the file position pointer for the file referenced by stream to the byte location calculated by offset.
程序例:
[cpp] view plaincopy
#include <stdio.h>
long filesize(FILE *stream);
int main(void)
{
FILE *stream;
stream = fopen("MYFILE.TXT", "w+");
fprintf(stream, "This is a test");
printf("Filesize of MYFILE.TXT is %ld bytes
", filesize(stream));
fclose(stream);
return 0;
}
long filesize(FILE *stream)
{
long curpos, length;
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
简言之:
fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
使用实例:
[cpp] view plaincopy
#include <stdio.h>
#define N 5
typedef struct student {
long sno;
char name[10];
float score[3];
} STU;
void fun(char *filename, STU n)
{
FILE *fp;
fp = fopen(filename, "rb+");
fseek(fp, -1L*sizeof(STU),SEEK_END);
fwrite(&n, sizeof(STU), 1, fp);
fclose(fp);
}
void main()
{
STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88},
{10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87},
{10005,"ZhangSan", 95, 80, 88}};
STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
int i,j; FILE *fp;
fp = fopen("student.dat", "wb");
fwrite(t, sizeof(STU), N, fp);
fclose(fp);
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
printf("
The original data :
");
for (j=0; j<N; j++)
{
printf("
No: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
for (i=0; i<3; i++)
[cpp] view plaincopy
printf("%6.2f ", ss[j].score[i]);
printf("
");
}
fun("student.dat", n);
printf("
The data after modifing :
");
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
for (j=0; j<N; j++)
{
printf("
No: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
for (i=0; i<3; i++)
[cpp] view plaincopy
printf("%6.2f ", ss[j].score[i]);
printf("
");
}C语言 fseek(fp,offset,SEEK_SET)什么意思
首先得保证文件已经打开,不然会copy报错。
fseek是一种函数
fp :指针
offset:偏移量
seek_set:文件开头
总体意思,将指针移知到文件开头,偏移量为“2”(自己设置多少,正后,负前,我设置的意思是移动道到后2个字节处)
关于半月湾HMBCloud商家之前也有几篇那文章介绍过这个商家的产品,对于他们家的其他产品我都没有多加留意,而是对他们家的DC5机房很多人还是比较喜欢的,这个比我们有些比较熟悉的某商家DC6 DC9机房限时,而且半月湾HMBCloud商家是相对便宜的。关于半月湾DC5机房的方案选择和介绍:1、半月湾三网洛杉矶DC5 CN2 GIA同款DC6 DC9 1G内存 1TB流量 月$4.992、亲测选择半...
快云科技: 12.12特惠推出全场VPS 7折购 续费同价 年付仅不到五折公司介绍:快云科技是成立于2020年的新进主机商,持有IDC/ICP等证件资质齐全主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国内回程三网CN2 GIA,平均延迟50ms以下。...
GreenCloudVPS最近在新加坡DC2节点上了新机器,Dual Xeon Silver 4216 CPU,DDR4内存,10Gbps网络端口,推出了几款大硬盘VPS套餐,基于KVM架构,500GB磁盘起年付30美元。除了大硬盘套餐外,还加推了几款采用NVMe硬盘的常规套餐,最低年付20美元。不过需要提醒的是,机房非直连中国,尤其是电信用户ping值感人,包括新加坡DC1也是如此。大硬盘VPS...
fseek为你推荐
短信营销方案短信平台应该如何推广和运营啊?最好的翻译网站求最好的翻译网站和软件网络视频下载器谁能给我找个网络视频下载器和转换器?比思论坛永久域名不知道为什么 比思论坛的网站打不开 怎么办呐暴力破解rar怎么暴力破解rar密码?快速且有效的暴力破解rar对RAR压缩包进行解压时需要密码,使用暴力破解仍无法解码该怎么办?pat是什么格式怎么能把常用格式的图片转换成PAT格式的呀~wow服务器状态我电脑上的魔兽服务器状态很好.但是还是玩不起来.请问可以玩了不?averagesPoisson-Arrivals-See-Time-Averages是什么意思netbios协议现在怎么还有用NetBios协议的,这个协议和TCP/IP协议有什么关系,为什么获取网卡的信息还要
三级域名网站 ipage 双12活动 贵州电信宽带测速 轻博 美国php空间 创梦 域名dns 东莞主机托管 个人免费邮箱 贵阳电信 ledlamp 阵亡将士纪念日 广东服务器托管 好看的空间 服务器防御 SmartAXMT800 香港博客 restart e-mail 更多