fread与fgets
时间: 2023-08-11 18:35:42 浏览: 59
`fread()`和`fgets()`都是C语言标准库中用于读取文件内容的函数,但它们有一些不同之处。
`fread()`函数的原型为:
```c
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
```
该函数从指定的`stream`中读取数据,每次读取`size`字节,最多读取`count`次,将读取到的数据存储到`ptr`指向的内存中。函数返回实际读取到的元素个数(即`count`和实际读取次数中的较小值),如果返回值为0,则表示已经读取到文件末尾或发生了错误。
与之相对,`fgets()`函数的原型为:
```c
char *fgets(char *str, int n, FILE *stream);
```
该函数从指定的`stream`中读取一行数据,最多读取`n-1`个字符,将读取到的数据存储到`str`指向的内存中,并在结尾处添加一个空字符`\0`。函数返回指向`str`的指针,如果返回值为`NULL`,则表示已经读取到文件末尾或发生了错误。
因为`fread()`函数是按照字节读取数据的,所以它在读取二进制文件时比较常用。而`fgets()`函数则常用于读取文本文件中的一行数据。如果读取二进制文件时使用`fgets()`函数,可能会出现读取到换行符`\n`时停止读取的情况,导致读取的数据不完整。
总的来说,`fread()`函数适用于读取二进制文件,而`fgets()`函数适用于读取文本文件。
相关问题
fread与fgets的区别
fread和fgets是C语言中处理文件读取的两个函数,它们有一些区别:
1. fread函数:
- fread函数是二进制模式下读取文件的函数,可以一次读取指定字节数的数据。
- 它的函数原型为:`size_t fread(void *ptr, size_t size, size_t count, FILE *stream)`。
- 第一个参数ptr是用于存储读取数据的缓冲区的指针。
- 第二个参数size是每个数据项的大小(以字节为单位)。
- 第三个参数count是要读取的数据项的数量。
- 第四个参数stream是要读取的文件指针。
- fread函数返回成功读取的数据项数目。
- 适合读取二进制文件或者已知格式的结构化数据。
2. fgets函数:
- fgets函数是文本模式下逐行读取文件的函数。
- 它的函数原型为:`char *fgets(char *str, int n, FILE *stream)`。
- 第一个参数str是用于存储读取行的字符数组(字符串)的指针。
- 第二个参数n是要读取的最大字符数(包括终止符'\0')。
- 第三个参数stream是要读取的文件指针。
- fgets函数返回成功读取到的字符串指针,如果到达文件末尾或出错,则返回NULL。
- 适合逐行读取文本文件,例如读取配置文件、日志文件等。
总结来说,fread函数适合读取二进制文件或者已知格式的结构化数据,而fgets函数适合逐行读取文本文件。
fread、fgets fscanf
fread、fgets和fscanf是C语言中用于读取内容的函数。
1. fread函数:
fread函数用于从文件中读取二进制数据。它的原型如下:
```c
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
```
参数说明:
- ptr:指向存储读取数据的内存块的指针。
- size:每个数据项的字节数。
- count:要读取的数据项的个数。
- stream:指向FILE对象的指针,表示要读取的文件。
2. fgets函数:
fgets函数用于从文件中读取一行文本数据。它的原型如下:
```c
char *fgets(char *str, int n, FILE *stream);
```
参数说明:
- str:指向存储读取数据的字符数组的指针。
- n:要读取的最大字符数(包括换行符和终止符)。
- stream:指向FILE对象的指针,表示要读取的文件。
3. fscanf函数:
fscanf函数用于从文件中按照指定格式读取数据。它的原型如下:
```c
int fscanf(FILE *stream, const char *format, ...);
```
参数说明:
- stream:指向FILE对象的指针,表示要读取的文件。
- format:格式字符串,指定了要读取的数据的格式。
- ...:可变参数列表,用于接收读取到的数据。