思路
首先要打开你要打开的文件例如我这边桌面的demo.txt,利用相关函数计算出这个文件大小,然后开始遍历里面的内容,一个字符一个字符的遍历,如果找到了要被替换的字符就当场重新把新的内容赋值进去,最后重新覆盖整个文章。(可能表达有误,可直接看代码)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201120200051490.png#pic_center)
代码
#include <stdio.h>
#include <stdlib.h>
char *strChar()
{
char *str = (char *)malloc(2);
gets(str);
return str;
}
char *desChar()
{
char *des = (char *)malloc(2);
gets(des);
return des;
}
int main(int argc, char const *argv[])
{
FILE *fp;
int cnt = 0;
int i;
char readBuf[1024];
char *a = (char *)malloc(2);
char *b = (char *)malloc(2);
printf("请输入你要被替换的字符\n");
a = strChar();
printf("请输入你要替换的字符\n");
b = desChar();
//fopen(filename,mode,include_path,context)
fp = fopen("C:\\Users\\ASUS\\Desktop\\demo.txt","r+");//读写的方式打开
if(fp == NULL){
printf("fopen 失败\n");
exit(-1);
}
//1.计算打开文件的大小
//int fseek(FILE *stream, long int offset, int whence)
fseek(fp,0,SEEK_END);//光标默认再开头,这里用SEEK_END可以把光标移到文章末尾这样就可以计算出文件大小
int size = ftell(fp);//计算大小
printf("文章大小为%d\n",size );
//2.读取打开文件里面卖的内容
fseek(fp,0,SEEK_SET);//回到文章头部
//size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
//从给定流 stream 读取数据到 ptr 所指向的数组中。
int n_fread = fread(readBuf,sizeof(char)*size,1,fp);//把fp里面的内容读取到readBuf里面去,一次读sizeof(char)*size这么大,读一次
if(n_fread < 0){
printf("fread出错\n");
exit(-1);
}
//3.遍历里面的内容,找到需要被替换的字符并进行替换赋值
for(i = 0; i < size+1; i++){
if(readBuf[i] == *a){
readBuf[i] = *b;
cnt++;
}
}
//4.将readBuf里面内容在写到fp中
fseek(fp,0,SEEK_SET);//回到文章头部
//size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
//把 ptr 所指向的数组中的数据写入到给定流 stream 中
int n_write = fwrite(readBuf,sizeof(char)*size,1,fp);
if(n_write < 0){
printf("n_write失败\n" );
exit(-1);
}
printf("修改了%d次\n",cnt);
fclose(fp);
return 0;
}
结果
运行前的demo.txt
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201120200151621.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDIzNDI5NA==,size_16,color_FFFFFF,t_70#pic_center)
运行后
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201120200225854.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDIzNDI5NA==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201120200245708.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDIzNDI5NA==,size_16,color_FFFFFF,t_70#pic_center)