我是C语言编程的新手,只是编写一个简单的程序来读取文本文件中的所有行,并用一个新的数字替换每个数字。这是我的代码。它会打印到控制台的每一行,但不会打印到文件。有人可以建议我的代码有什么问题吗?
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE * file_ptr;
int num;
char line[128];
file_ptr = fopen (argv[1], "a+");
if(file_ptr==NULL)
{
printf("Error opening file");
}
if(file_ptr!=NULL)
{
while(fgets(line,128,file_ptr)!=NULL)
{
fputs("df",file_ptr);
printf("2");
}
}
fclose(file_ptr);
return(0);
}
问题是您正在从同一文件读取和写入,并且读取和写入会交互。
以a+
(添加,允许读取)模式打开文件会将文件位置设置在文件的开头,因此第一次调用将fgets
读取第一行。但是在追加模式下,所有写操作均在文件末尾执行。因此,第一个调用fputs
将文件位置设置为文件末尾,然后写入df
。由于在读取和写入操作中只有一个文件位置,因此对文件的下一个调用将fgets
在文件末尾执行,并且不读取任何内容。
文件位置的行为使该模式最a+
适合您要读取文件的当前全部内容,然后在末尾添加内容的情况。
请注意,修改文件中间内容的唯一方法是用相同长度的字节序列替换字节序列。因此,您可以替换12
为df
,但不能替换123
为df
:如果将文件位置设置在要写入的位置123
并进行写操作df
,最终将得到df3
。要用长度可能不同的字符串替换数字,您需要整体重写文件
当您要完全修改文件时,有三种主要技术:
第一种方法有一个主要缺点:如果程序崩溃或计算机断电,文件将丢失。因此,您几乎应该始终使用其他两种方法之一:它们使用更多的磁盘空间,但是增加安全性几乎总是值得的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句