首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这两个函数有什么不一样?解决方案

2012-03-09 
这两个函数有什么不一样?in.dat中存有100行10列数据,每行均为0或1charxx[100][11]intReadDat(void){FILE*f

这两个函数有什么不一样?
in.dat中存有100行10列数据,每行均为0或1

char   xx[100][11]

int   ReadDat(void)
{FILE   *fp;
int   i;
char   tt[13];
if((fp=fopen( "in.dat ", "r "   ))==NULL)   return   1;
for(i=0;i <100;i++){
if(fgets(tt,13,fp)==NULL)return   1;
memcpy(xx[i],tt,10);
xx[i][10]=0;
}
fclose(fp);
return   0;
}

int   ReadDat(void)
{              
  FILE   *fp;
  int   i;
  if((fp=fopen( "IN.DAT ", "r "))   ==   NULL)   return   1;
  for(i=0;i <100;i++)
  {
  if(fgets(xx[i],11,fp)==NULL)return   1;

xx[i][10]= '\0 ';
  }
fclose(fp);
return   0;
}


[解决办法]
我发现有两个主要区别:
1) 文件名不一样,一个为全大写的 "IN.DAT ",另一个为全小写的“in.data”,在Linux下这是两个不同的文件。
2) 对于fgets()调用的处理不一样,因为fgets把换行符也作为有效的字符,所以当一行有10个字符时,实际上它将需要11(在Linux平台上换行符为 "\n ")或者12个字符(Window平台上换行符为 "\r\n "),加上字符串结束符实际上最多需要13个字节的缓冲区。

所以前者可以得到你想要的结果,而后者很可能得到类似如下的结果
0000000000
\r
\n
0000000001
\r
\n
0000000010
...

热点排行