C语言文件操作中 为什么无法修改中间某一行数据?

有个文件,内容为
01
02
3333
44444
我想把第二行的02改成别的数(比如06),可是改不了。。。
代码如下

FILE *fp;
char string[10];
int num = 6;

fp = fopen("abc.txt","r+");

rewind(fp);

fgets(string, 10, fp); //这行代码只是为了将文件位置标记移到第二行
//如果把这行代码去掉,直接修改第一行的01就可以,而我想改02就不行。

fprintf(fp, "%02d\n", num);

fclose(fp);

不要让我把全部文件内容都读出来改完再全部保存。。。
顺便问一下,如果我想在中间插入一行数据该怎么做呢?

fgets和gets有一个很大的不同,就是读完一行后光标停留在当前行的结束符的位置,并不会自动转行。你的问题就出在这里。可以用一个fgetc(fp)来转行。至于第二个问题,文件打开方式你再仔细看一下,我记不得是”w+“还是别的什么了。追问

加完fgetc(fp);还是不行。。
我用 putchar( fgetc(fp) ); 测试,输出一个字符0,然后我连用两个putchar( fgetc(fp) ); 来测试,输出02, 说明它已经换到下一行了,可那文件还是改不了。。是根本没变化

追答

我用你的程序段试了一下,c语言没能更改当前已经读取到的这一行(就是02)如果将fprintf(fp, "%02d\n", num);改为fprintf(fp, "%03d\n", num);第二行会变成026。就这点来讲,应该是fgets造成的,如果用fseek来进行光标的移动就不会造成这个问题。但当我们不知道光标应该移动到什么位置时怎么做呢?可以先用ftell输出当前光标位置,然后fclose,fopen,并且用fseek移动光标到之前ftell的位置。很抱歉很久不用c语言,之前的回答上有些错漏。

温馨提示:内容为网友见解,仅供参考
无其他回答

C语言文件操作中 为什么无法修改中间某一行数据?
fgets和gets有一个很大的不同,就是读完一行后光标停留在当前行的结束符的位置,并不会自动转行。你的问题就出在这里。可以用一个fgetc(fp)来转行。至于第二个问题,文件打开方式你再仔细看一下,我记不得是”w+“还是别的什么了。

c语言删除文件中的指定的一行数据怎么做
所以对于这些简单的文件来说,要想直接删除里面的内容是不可能的。一般有两个方法实现这个功能:1.把要保留的内容写到另一个文件中,要删掉的内容就不用写了。2.把要保留的内容存储到一个字符串变量中,要删掉的内容不用存储,最后把这个字符串再写回到原文件中覆盖原来的内容。例程:include<stdio.h...

C语言文件操作问题,怎样替换文件中一行数据
首先,数据写入到文件中的是追加的形式。具体的写入代码如下所示: 主要写入时要指定每个数据的宽度,若不指定,当修改某行的数据,修改后的长度大于修改前得长度,将影响文件中的下一行。制定宽度之后,只要修改后的长度不大于制定的宽度,都不影响下面的内容。(这是注意点) FILE *fp=fopen("clientinfo.txt","ar+")...

c语言 如何删除文件中的一行,求解答!
一、最简单的办法,建议读到链表里,删除其中一个节点。然后再覆盖写回到文件。二、找到要删除的位置,fseek到该位置,将之后需要保留的文件内容,从这里开始写。三、利用内存映射,将文件映射到内存,直接对内存修改,但是对内存修改,也是需要类似于方法2,将需要保留的内容重新移动位置。综上,方法一最...

C语言文件关闭函数fclose(文件指针)疑问
假如文件是存储在硬盘上,那么所有内容是用磁化的方法写的,能掉电不丢失。你的程序将文件打开后,将其内容的第1行读入了计算机的随机存储器中(具体就是line数组)关闭文件后,文件仍然保持不变 line数组已经读到了数据,这些数据虽然等于文件的第1行,但已经与文件没有关系了,你使用和修改这些数据不会...

怎样改变C语言中建立的文件中某一项的值
txt,"r"是只读方式 printf("Cannot open file!\\n");exit(1);} fscanf(fp, "%s", Buf); \/\/ 读取文件中的内容 fclose(fp);printf("%s\\n", Buf);return 0;} 你说要改某一项,太含糊了,不知道要改的是出现的某一字符串,还是文件是记录形式的,改某一个记录。

怎么用C语言对文件操作用特定内容替换其中某些内容
不过要注意的是,你从这位置开始写新的内容,可以覆盖原内容,所以如果新的内容比你想覆盖的内容长的话,会把后面你想保留的内容也覆盖掉。这种思路,你想要实现修改指定内容,还需要把修改内容之后的数据也读出来备份,再一起写进去。所以最简单,还是直接生成新的文件替换原文件。

怎么用c语言删除文件中的某一行记录,急啊!
把要删除记录的后续记录读进来,在从要删除的位置写回去.不就把要删除的数据给覆盖了吗.

如何用C语言文件操作修改指定文件
由于操作系统对文件操作做了封装,本来很容易的事情变得很难了。修改文件最好的,最简单的方法,是新建一个文件,把修改部分前面的,先写入新文件,然后写入修改的部分,再把后一部分没有修改的,写到新文件中去。然后文件重命名。原文件改名备份文件,新文件改名原文件。如果修改的数据很少N~100N KB,...

C语言怎么修改文本文件具体位置的内容?
一种是计算出原有行的长度和在文件中的位置,然后计算出修改后的行的长度 如果两个长度相等,则直接写入就可以了 如果修改后的短一些,则填入空格 如果修改后的长一些,则比较麻烦,只能将后面的部分也全部重新写入文件 换行一般是\\r\\n 可以以\\n为标志作为换行,如果是windows则可以以\\r为换行标志 ...

相似回答