关于fscanf的问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 04:44:02
bh是有返回名字总笔画数功能的函数
check.txt是笔画与汉字对应的文件

问题是 在进行查找时,进行到第七个名字的时候 每个字返回的笔画数
就都是0,此时k也是0.前面六个都正常返回正确值。 主函数的循环都没问题。各位前辈帮忙看看是不是这个函数有问题啊?急死了~~~

int Bh(char *s)
{
int i=0,j=0,m=0;
char p[3]="\0";
m=strlen(s);
for(i=0;i<m-1;i=i+2)
{
p[0]=s[i];
p[1]=s[i+1];
if(!(p[0]==' '&&p[1]==' '))
{ j+=Search(p);}
}
return j;
}

int Search(char *p)
{
FILE *fp; /*汉字和笔画对应文件**/
char *t=(char*)malloc(sizeof(char));/*汉字*/
int k=0;/*笔画数*/
fp=fopen("C:\\check.txt","r");
if(fp==NULL)
{
printf("cannot open the file:C:\\check.txt\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%d",t,&k);
if(strcmp(p,t)==0)
{
fclose(fp);
return k;
}

参考答案爱的力气大到可以使人忘却一切,却又小到连一粒嫉妒的沙石也不能容纳。

指针t指向的空间只有一个字节!用%s读入太危险了,要知道一个汉字都要两个字节啊!

空间分配不足并不代表不能运行,因为你将把内容写出边界,从而可能会发生各种不可预料的结果。另外,你的程序还有其他问题,那就是你所分配的空间在函数退出之前没有释放。随着你不断调用Search函数,你所占用的内存也越来越多。这些都是很常见的BUG。

最简单的办法是把下句
char *t=(char*)malloc(sizeof(char));
改为
char t[20];/* 多分配点空间没坏处 */
这样两个问题都解决了。

你的程序中问题还不止如此。
char p[3]="\0"; 一句也是错误的,真不知你是怎么通过编译的?
应写为:
char p[3];
p[2] = '\0';