读写指针的位置,fopen函数的读写指针的位置一定要在文件首吗可以在文件的其他位

1,fopen函数的读写指针的位置一定要在文件首吗可以在文件的其他位不一定,根据实际的读写要求 。如果是续写,那起始的指针位置就在文件的末尾io错吧,比较你根本操作不了磁盘 。当然可以 。参考seek函数
2,c语言读取txt文本内容时如何确定指针的位置你可以用 %*c格式 跳过 逗号:fscanf(fp,"%d %*c %d %*c %d %*c %d %*c %d",&a,&b,&c,&d,&e);或用 逗号 格式 跳过 逗号:fscanf(fp,"%d,%d,%d,%d, %d",&a,&b,&c,&d,&e);
3 , c中怎样读取文件中的指针地址在调用getline之前,先调用tellg()得到当前位置,然后getline(),需要返回的时候调用seekg() 。代码如下: #include #include #include using namespace std; void main() { string s; char ch[500000]; ofstream ob1("ab.txt"); ifstream ifs("e...指针存进去没有用的,每次重新装入不能保证数据的地址是一样的 。保存数据,最好依照数组的方式组织,比如多个结构体的数据,首先保存计数,然后按照数量一个一个的读取结构体的数据 。【读写指针的位置,fopen函数的读写指针的位置一定要在文件首吗可以在文件的其他位】
4,使用fopen函数打开一个文件时读写指针一定在文件首对不对成功打开读写文件时指针一定在文件首 。但打开添加 文件时,在文件尾 。用rewind(fp) 可以回绕到文件首 。根据实际的读写要求 。如果是续写 , 那起始的指针位置就在文件的末尾 。通常填入“附加”;另外还可以使用“a+”来读和写更新 。该文件已更新为“r+”读和写更新 。将更新写入“w+” 。fopen函数在当前目录中打开一个文件,调用的一般形式是:文件指针名称=fopen(文件名,文件模式);“文件指针名称”必须声明为指向文件类型的指针;“文件名”是打开文件的文件名;“文件模式”是指文件的类型和操作要求;“文件名”是字符串常量或字符数组 。扩展资料:if((fp=fopen("c:\\hzk16","rb"))==NULL)printf("\nerror on open c:\\hzk16 file!");getch();exit(1);}这段程序的意义是 , 如果返回的指针为空,表示不能打开C盘根目录下的hzk16文件 , 则给出提示信息“error on open c:\ hzk16 file!”,下一行getch()的功能是从键盘输入一个字符 , 但不在屏幕上显示 。在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行 , 因此用户可利用这个等待时间阅读出错提示 。敲键后执行exit(1)退出程序 。参考资料来源:百度百科-c语言fopen函数比如linux系统下 , 如果你在没有写权限的目录下使用fopen("disk.dat", "wb")便会返回null,通过查看errno的值可以获得出错代码 。如果 钻牛角尖,因为 有不同码的文本,前面有相应的标识码,说其是什么 码的文件!那么读写指针一定在 文件的 额外数据(真正用户数据)开始的地方!成功打开 读 写 文件时 指针一定在文件首 。但打开 添加 文件时 , 在文件 尾 。用 rewind(fp) 可以回绕到 文件 首 。5 , 关于fread读取数据时指针的位置问题这个r我一般是用来检测文件的,fread这个函数的返回值就是它读取了几次的值,在你这里fread返回值为1,所以r的值应该是1,如果r值为0 , 那么就代表读取错误,一般来说就是文件读取完了 。可以把r=fread(&dat, sizeof(dat), 1, f)作为if语句括号内的表达式 。我习惯用这种方式来检测文件指针是否到了文件末尾 。最后一条数据输出2次这个问题我也遇到过 , 是检测文件是否到末尾的问题,我用while(!feof(fp))就会出现这种问题,应该是判断文件指针是否到文件末尾出现错误了,具体原因我也不清楚 , 不过很容易解决,就是利用类似楼上的r的方式 。while(1){if(fread(&A,sizeof(struct employee),1,fp)!=1)break;}直接用fread的返回值判断比较准确 , 用判断指针的方式有问题 。文件指针是移动一个字节再读取一个字节,当读取完一个结构体之后,文件指针指向该结构体最后一个字节 , 只有进行下次读取时,文件指针才会移动,所以当读取完文件中最后一个结构体 , 文件指针指向的是最后一个结构体的最后一个字节,而不是文件末尾——这就像字符数组,最后一个字母不是末尾,末尾是\0 。所以读取完文件中最后一个结构体后,文件指针去没有移动到文件末尾 。这样while的循环体就要多执行一次 。你问为什么上面2部分代码输出结果不一样,那是因为printf的位置不一样 。while的循环体会多执行一次,在这一次中fread是不能正确读取数据的——因为文件指针的位置,所以printf函数输出的就是内存中原有的结构体,即文件中的最后一个结构体 。你上面那个函数printf在fread前面 , 即先输出然后再读取下一次的,这样就避免了出错 。你下面那个呢?先读取再输出 , 这样问题就来了,读取出错,但是输出可没出错,所以就把内存中数据给输出了,所以最后一条数据输出了2次 。上面写得都不对,正确写法是:struct MyData{...};int r = 0; struct MyData dat;FILE * f = fopen("abc.txt", "rb");if(!f) return 0;while(!feof(f)) {r = fread(&dat, sizeof(dat), 1, f);if(r < 1 ) break;printf(....);}//end whilefclose(f);注意,需要检测fread()的返回值 , 同时循环的时候要检测文件是否结束feof()!

    推荐阅读