我是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);
}
Run Code Online (Sandbox Code Playgroud)
问题是你从同一个文件读写,你的读写交互.
使用模式打开文件a+(追加,允许读取)将文件位置设置在文件的开头,因此第一次调用fgets读取第一行.但是在附加模式下,所有写入都在文件末尾执行.所以第一次调用fputs将文件位置设置为文件的末尾,然后写入df.由于读取和写入都有单个文件位置,因此下一次调用将fgets在文件末尾执行,并且不会读取任何内容.
a+当您想要读取文件的整个当前内容然后在末尾添加内容时,文件位置的行为使模式适当.
请注意,修改文件中间内容的唯一方法是将字节序列替换为具有相同长度的字节序列.所以你可以替换12为df,但你不能替换123为df:如果你设置文件位置123和写df,你最终会得到df3.要用可能不同长度的字符串替换数字,您需要重写整个文件
如果要完全修改文件,有三种主要技术:
第一种方法有一个主要缺点:如果程序崩溃或计算机断电,文件将丢失.因此,您几乎应该总是使用另外两种方法中的一种:它们使用更多的磁盘空间,但增加的安全性几乎总是值得的.