帮忙详细!!!解释一下,谢谢了:P 就20分了

qq3343450 2002-08-18 06:06:47
这段代码读不太懂,帮忙详细!!!解释一下,谢谢了“
int readDat(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen("in.dat","r"))==NULL)return 1;
while(fgets(xx[i],80,fp)!=NULL){
p=strchr(xx[i],'\n');
if(p)*p=0;
i++;
}
/*maxline=i;*/
fclose(fp);
return 0;
}”

in.dat文件如下:

1010100011
......
.....
1010100011
1010100011
1010100011

一共100行!!!中间略
每一句都说明一下吧:P“if(p)*p=0;”有什么用呀??
...全文
29 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tony_nbu 2002-08-18
  • 打赏
  • 举报
回复
也可以读81啊,只要你的数组不越界就行,这只是人为因素
至于if(p)*p=0 kwok说得很对啊,是为了判断文件读取是否成功,把p赋0是为了下次的判断
kwok_1980 2002-08-18
  • 打赏
  • 举报
回复
>>这是一个文件一行的长度(规定).

kwok_1980 2002-08-18
  • 打赏
  • 举报
回复
为什么要读80呢?不读81???
>>这是一个文件的长度(规定).

“如果找到第一次出现'\n'的位置,则把其内容改为0”
>>并非如此
if(p)*p=0;
>>说明文件读取成功.将其设置成0就是null(空).以备重新再用!
Tony_nbu 2002-08-18
  • 打赏
  • 举报
回复
打开“in.dat"文件,从fp所指向的文件缓冲流中每次读取80个字节的字符并存入xx[i]所指的内存空间,p=strchr(xx[i],'\n')找出xx[i]指向的字符串中第一次出现'\n'的位置并赋给p;
if(p)*p=0判断p的值是否为非零值,如果是的话,那么把p所指向的内存空间(也就是xx[i]所指向的内存中第一次出现'\n'的地方)赋值为零,然后i++指向一个新的空间依次键入值并判断
qq3343450 2002-08-18
  • 打赏
  • 举报
回复
为什么要读80呢?不读81???
“如果找到第一次出现'\n'的位置,则把其内容改为0”
为什么要改成0
luxuanmin 2002-08-18
  • 打赏
  • 举报
回复
该段代码的意思是以只读方式打开“in.dat”文件,然后从该文件每次读取长度为79的字符串存入xx[i]数组中,注意,由于循环中i的值不断发生变化,所以每次存入时的地址要增加。对于存入数组中的字符串,如果找到第一次出现'\n'的位置,则把其内容改为0,最后关闭文件,就这样。
purpleclouds 2002-08-18
  • 打赏
  • 举报
回复
把'\n'换成'\0'

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧