C语言中比scanf更高效的大量数据读入方法
时间: 2024-10-16 15:10:15 浏览: 24
C语言中,如果需要高效地读取大量数据,可以考虑使用`fread`函数,它是一个标准库函数,用于从二进制文件或内存映射文件中读取数据。相比于`scanf`,`fread`一次能够处理固定大小的数据块,通常以字节、短整型、长整型或浮点数等基本数据类型的数组形式。
例如,如果你有一个结构体,并且你知道每个结构体在内存中占用的字节数,可以这样做:
```c
#include <stdio.h>
#include <stdlib.h>
// 假设有个结构体Person
typedef struct {
int id;
char name[50];
} Person;
void read_people_from_file(FILE *file, Person *people, size_t num_people) {
fread(people, sizeof(Person), num_people, file);
}
int main() {
FILE *fp = fopen("data.bin", "rb");
if (fp == NULL) {
// 处理打开文件失败
}
size_t num_people = ...; // 数据量
Person *people = malloc(num_people * sizeof(Person)); // 预分配内存
read_people_from_file(fp, people, num_people);
// 使用people数组...
fclose(fp);
free(people); // 程序结束前记得释放内存
return 0;
}
```
在这个例子中,`fread`直接操作了预分配的连续内存空间,避免了多次解析输入字符串的过程,提高了效率。
阅读全文