fread
功能:
从指定文件stream中读取count个单位大小size的数据向缓冲区空间ptr写入
参数:
(1)void* ptr,待写入缓冲区地址;
(2)size_t size,写入数据单位大小(一个多大),一般设置为1字节,方面写入;
(3)size_t count,数量大小(几个);
(4)FILE *stream,数据来源文件;
返回值
成功读取返回读取数据个数,也就是count;
读取失败或者文件指针已经到end,自动报错;
如果count大小为0,则返回0,且缓冲区ptr和stream文件指针都不受影响;
fgets
功能:
从流stream中读取num-1个字符并将它们作为 C字符串存储到str中
参数:
(1)char* str,待写入缓冲区地址;
(2)int_t num,写入字符个数;
(4)FILE *stream,数据来源文件流;
返回值
成功读取返回str,C字符串地址
如果文件指针已经到eof结尾返回NULL,且str内容不受影响;
如果读取失败返回NULL 并报错,但是str内容可能够受到影响;
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
char buff[1024]={0};
FILE* f = fopen("1.txt","r+");
//fgets demo
fgets(buff,1024,f); //正确读取全文格式:while( fgets(buff,1024,f) ) ....;
printf("fgets():\n%s",buff);
buff[0] = 0;//清空
rewind(f);//文件指针回到初始
//fread() demo
fread(buff,1,1023,f);
printf("fread():\n%s",buff);
fclose(f);
return 0;
}
其中1.txt文本内容:
运行结果:
总结
可见,fgets()函数一次只能读取一行,遇到文件末尾的’\n’将它读取之后则会停止之后行的读取;
而fread()函数会读取整文,包括每一行的’\n’;