
有三种方法可以实现,分别如下:
第1种、将文件中数据读入内存中,修改后,清空源文件,存入新数据。
第2种、以读写的方式打开文件,将文件指针移动到要修改的地方,写入新数据。新数据将会覆盖掉旧数据。
第3种、以读写的方式打开文件,将文件指针定位到需要修改数据的末尾,然后删除需要修改的数据(通过循环n次执行fputc(8,fp),直到清空需要修改的数据为止,8为退格键对应的ascii)。 然后计算需要加入的新数据长度,通过fputc(32,fp)来添加空格到文件中(32为空格键的ascii). 然后根据指针位置,填入数据覆盖掉这些空格。
注意:第1种方法适合数据量较小的情况,第2种、第3种适合数据量较大的情况。
提供一个参考代码,如下:
#include "stdio.h"main()
{
FILE *in=fopen("f:\\test.txt","r")
FILE *out=fopen("f:\\back.txt","w") /*out是充当临时文件作用*/
int ch=0
if(!in)
{
printf("cann't open test.txt\n")
exit(1)
}
if(!out)
{
printf("cann't create back.txt\n")
exit(1)
}
/*开始复制*/
while(!feof(in))
{
ch=fgetc(in)
if(ch=='a') ch='p'
fputc(ch,out)
}
fclose(in) fclose(out)
unlink("f:\\test.txt") /*删除test.txt*/
rename("f:\\back.txt","test.txt") /*改名*/
printf("ok!!!!!!\n")
}
C语言是一种强类型语言,要求在使用数据前需要对数据的类型进行声明;变量的定义就是创建一个变量,这个变量按照指定的数据类型分配一块内存空间并给它取上一个名字,这个名字就是变量名,变量名和分配的内存块是绑定起来的,程序员通过变量名对这块内存进行存取 *** 作。所以如果修改了变量名就不知道该变量所指的内存块是哪里了。
变量分为全局变量,局部变量,静态变量等,每种变量的存放位置是不一样的;如全局变量存放在静态存储区 ,局部变量存放在栈里做临时存储
主函数的问题不大,但也应尽力克服。str_bin这个函数存在严重问题,即使可以正常运行那也是运气——C是函数中的局部数组,函数退出后就消失了,返回C指针后是“无法保证”C中的数据是正常的,而且可能会带来其他严重后果;而且,C是指针,但函数名前面写的却是char,所以str_bin要重写。基本按你的思路,写一个你对照看。有问题续问。
#include "stdio.h"char *str_bin(char *s1,char *s2,char *s){//返回应该是指针,传过来的也应该是指针
char *p=s
while(*s1 || *s2){
if(*s1<=*s2 && *s1)
*s++=*s1++
else if(*s2)
*s++=*s2++
else if(*s1)
*s++=*s1++
}
*s='\0'
return p
}
int main(int argv,char *argc[]){
char a[100],b[100],c[200]//在这里声明C数组
char *p=0
printf("Input 2 string...\n")
//gets(a)//这个函数不能控制长度,超过100字符会产生问题
scanf("%100s%100s",a,b)//用这个函数可避免上述问题
//gets(b)
p=str_bin(a,b,c)//把c数组的地址传给函数
puts(p)
return 0
}
运行样例:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)