一直在学习 发表于 2021-3-23 20:17:27

fseek指针移动

#include<stdio.h>
#include<stdlib.h>
int main()
{      int i,n;
       FILE *fp;
if((fp=fopen("temp","w+"))==NULL)
{   printf("不能建立temp文件\n");
exit(0);
}

for(i=1;i<=10;i++)   fprintf(fp, "%3d",i);

for(i=0;i<10;i++)

{   fseek(fp, i* 3L ,SEEK_SET); //从文件头移动i*3个字节

fscanf(fp, "%d",&n);

fseek(fp, i* 3L ,0); //从文件头移动i*3个字节

fprintf(fp, "%3d",n+10);

}
当文件中被写入1,2,3,4,5,6,7,8,9,10后,经过第二个循环,文件内为11,12,13,14,15,16,17,18,19,20。
主要是对fseek中每次移动i*3个字节不理解,一个数字以ASCII码存储,占1个字节,为什么每次要移动3个字节??

wp231957 发表于 2021-3-24 06:57:27

第11行,那不是有宽度的吗,在写入文件时,这个也是占位的

一直在学习 发表于 2021-3-24 14:52:22

wp231957 发表于 2021-3-24 06:57
第11行,那不是有宽度的吗,在写入文件时,这个也是占位的

在三个宽度的情况下,比如当i=0时,fseek从文件头移动0个字节,此时指向的不是空格吗?再赋给n,为什么n就变成了1呢?
我把所有的3变成1后,竟然变成了乱码
谢谢!
页: [1]
查看完整版本: fseek指针移动