- 论坛徽章:
- 0
|
回复 10# k8king
首先,代码其实等价于
-
-
- while ( memset(tmpbuf,0,sizeof(tmpbuf)) ,
- fread(tmpbuf,1,sizeof(tmpbuf),fp)!=0 )
- {
- printf("tmpbuf = %s\n",tmpbuf);
- }
复制代码
memset(tmpbuf,0,sizeof(tmpbuf))的作用是把tmpbuf数组中的每个字节都填充为(unsigned char)0
fread()函数是把从fp指向的输入流中读取字符
如果不发生没读入的情况(fread(tmpbuf,1,sizeof(tmpbuf),fp)!=0)
那么tmpbuf数组的每个字符都被重写了一遍
从这里能够看出memset(tmpbuf,0,sizeof(tmpbuf))不必要性
(谁也不会 int n; n=0;scanf("%d",&n); 吧?)
由于tmpbuf数组的每个字符都被重写了一遍
无法保证在tmpbuf数组中存在'\0'
这样
printf("tmpbuf = %s\n",tmpbuf);
的结果就毫无保证
因而我认为memset(tmpbuf,0,sizeof(tmpbuf))非但不必要,而且是错误的
使用fread(tmpbuf,1,sizeof(tmpbuf),fp)读数据,我和前面4楼看法一样,感觉莫名其妙
我认为怎么也应该用fgets(),而且fp应该是"r"方式打开的而不是"rb"方式打开的 |
|