C语言的问题,fread和fgets的区别是什么?

以下程序:
#include "stdio.h"
#include "string.h"
void main()
{
char xx[80][80];
FILE *fp;
int i=0;char *p;
if((fp=fopen("IN.DAT","r"))==NULL) ;
while(fgets(xx[i],80,fp)!=NULL)
{
p=strchr(xx[i],'\n');
if(p) *p=0;
i++;
}
for(i=0;i<10;i++)
puts(xx[i]);
}
这个为什么输出结果和用fread的输出结果不一样?用一次fgets之后为什么fp指针没有越界,又能完整的读出下一个字符串来?还有ip(p),p是指针,用if语句是判断p是什么意思呢?

繁星coding
浏览 1328回答 4
4回答

动漫人物

fread读入的内容不包括最后的字符串终结符,而fgets则包括这个,也就是说fread读入的内容不是字符串,因为少一个终结符,而fgets则读入的是一个字符串。至于if(p)这个问题应该很明了,虽然p是指值,但是可以让指针指向NULL,这样的话就可以使用if(p)来判断指针是否指向了内存,若没有就跳过语句。
打开App,查看更多内容
随时随地看视频慕课网APP