高手帮忙看看这道c语言题,我实在想不出为什么结果不对

来源:百度知道 编辑:UC知道 时间:2024/05/29 23:10:35
我编了一个程序,目的是把一个文件中的特定字符组合替换成其他字符串,和进行一些修改(如当遇到Son组合时把它后面和';'前的字符串括在括号中存入新的文档),并存入里一个文件中,可是程序识别了“Son”后就不再向文件中写字符了,我想了三天也没向明白,谁知道这是怎么回事啊?那里错了,本来只有d=-1情况时程序可以得到正常结果,可当我加了d=-2时,也就是比d=-1时多加了个for循环就不能得到正常结果了,这是为什么啊???在线等

#include"stdio.h"
void writejava(int a);
void string(int a);
char*finishpath;
char*memory;
main()
{
FILE*fp;
char*filename="aa";
char b,f,c;
int d,e,i;
printf("please enter the path of the file: ");
scanf("%s",filename);
printf("ok~plesase enter the path of file finished");
scanf("%s",finishpath);
fp=fopen(filename,"r");
b=fgetc(fp);
f=fgetc(fp);
do{
d=0;
c=fgetc(fp);
if(b=='B'&&f=='u'&&c=='f')
d=-1;
if(b=='S'&&f=='o'&&c=='n'){
d=-2;
for(i=0;;i++)
{
if((c=fgetc(fp))==';')
break;
memory

没仔细看程序,只看了开头,发现了一个初学者常犯的错误,就是char *变量没有正确地赋初值。char *filename="aa";的话,filename指向的是静态变量"aa",接下来再scanf的话,就是向静态数据区写数据,会发生不可预知的错误;而且finishpath也没有赋初值。建议filename和finishpath都声明为char [256];因为路径长度不会超过255。

另外,从文件中读字符串可以用fscanf,可以一次读出"Buf","Son"这样的字符串。