在 C 语言的文件操作中,fread 是一个十分实用的函数,它能够帮助我们从文件中读取数据块,尤其擅长处理像图片、音频等。接下来,我来为你详细介绍一下。
函数的基本形式
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
参数解释 :
buffer :这是一个指针,指向一块内存区域,就像是一个 “仓库”,读取到的数据就会被存放在这里。size :表示每个元素所占的大小,以字节为单位。比如说,如果我们要读取整型数据(int 类型),那每个整数所占的字节数就是这个 size 的值,通常是 4 字节。count :是要读取的元素个数。比如我们想读取文件中的 10 个整数,那 count 就是 10。stream :指向 FILE 对象的指针,它标识了我们要从中读取数据的文件。通过它,函数就知道数据来自哪个具体的文件。
返回值 :返回实际读取到的元素数量。如果这个数量小于我们请求的 count 值,可能是到达文件末尾了,或者在读取过程中出现了错误。如果返回值是 0,那可能是发生了错误,或者已经到达了文件的末尾。
实例解析
#include
#include
int main() {
FILE *file = fopen("example.bin", "rb");// 以二进制读取模式打开文件
if (file == NULL) {
perror("Failed to open file");
return 1;
}
// 每个元素的大小,这里是整型的大小
const size_t elementSize = sizeof(int);
// 要读取的元素数量
const size_t elementCount = 10;
// 分配内存存储读取的数据,相当于准备一个 “仓库”
int *buffer = (int *)malloc(elementSize * elementCount);
if (buffer == NULL) {
perror("Memory allocation failed");
fclose(file);
return 1;
}
// 从文件中读取数据
size_t bytesRead = fread(buffer, elementSize, elementCount, file);
// 成功读取的情况
if (bytesRead == elementCount) {
printf("Successfully read %zu elements from the file.\n", bytesRead);
for (size_t i = 0; i < bytesRead; ++i) {
printf("%d ", buffer[i]);
}
printf("\n");
}
// 读取未达到预期的情况
else {
printf("Failed to read the requested number of elements. "
"Only %zu elements were read.\n", bytesRead);
}
// 关闭文件并释放内存,完成 “收尾” 工作
fclose(file);
free(buffer);
return 0;
}
在这个例子中,我们先打开了一个名为 “example.bin” 的二进制文件,然后准备了一个足够大小的内存缓冲区来存储读取的 10 个整数。接着,调用 fread 函数从文件中读取数据,并判断是否成功读取了期望的元素数量,最后把读取的数据打印出来,并做好资源清理工作。