C语言读字符输出字符问题

主要代码如下:
scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("Can not open the file.\nplease check your input.\n");
break;
}
fseek(fp,0L,SEEK_END);
filesize=ftell(fp);
rewind(fp); //要常常进行指针回首
deal=(char*)malloc((filesize+1)*sizeof(char));
fread(deal,sizeof(char),filesize,fp);
deal[filesize]='\0';
fclose(fp);
break;

然后操作函数:
void deleteu(char*tmp,FILE *fpp,char*target) ;
{
int i=0,j=0;
int t1=0,t3=0,file_size,k=0,num=0; //num为查找到字符串个数
char *buf;
t1=getlen(target);
file_size=getlen(tmp);
buf=(char*)malloc((file_size+1)*sizeof(char));
while(i<=file_size-t1&&j<t1)
{
if(target[j]==tmp[i+j])j++;
else
{
j=0;
buf[k]=tmp[i];
i++;
k++;
}
if(j==t1)
{
i=i+t1;
num=num+1;
j=0;
}
}
buf[file_size-num*t1]='\0';
t3=getlen(buf);

memorycopy(buf,tosave);
fprintf(fpp,"-d%d\n\n",num);
printf("%d\n",num);
fwrite(buf,sizeof(char),file_size-num*t1,fpp);
free(buf);
buf=0;
}

为什么我这个操作,文本最后的一个"."读入读出总感觉有点问题,有时会输不出".",修改后有时输出了这个点(最后一个字符)但后面多跟了一些乱码,请问该怎么解决呢?
请大家无视我的
memorycopy(buf,tosave);

这一句哈哈哈

第1个回答  2012-12-19
后面跟乱码,是因为有的数组或者什么的,没有初始化。
你可以把malloc 开辟的deal进行初始化,全部为0;

代码我没仔细看,基本上都是这些问题。
你在找找。
哪些地方有乱码的,哪里就有问题。
第2个回答  2012-12-18
字符串后,是以'\0'为结束的。追问

对的 我不是也这样写吗

追答

你是说输出吧。
buf最后的一个字符后,应该是0,你跟踪一下,看是不是。

另外
fwrite(buf,sizeof(char),file_size-num*t1,fpp);
写成如下试试
fwrite(buf,file_size-num*t1, 1, fpp);

本回答被提问者和网友采纳
相似回答