您的位置:

fread函数全面分析

一、读取二进制文件

#include &ltstdio.h>
int main() {
    FILE *fp;
    char buffer[10];
    fp = fopen("data.bin", "rb"); //以二进制方式打开文件
    fread(buffer, sizeof(char), 10, fp); //读取10个字节
    fclose(fp);

    return 0;
}

fread函数用于读取二进制文件,包括图像、视频、音频等多媒体格式,具有很高的应用价值。

在代码中,我们首先使用fopen函数以rb方式打开文件,rb表示以二进制方式读取文件。然后定义一个char类型的数组buffer,长度为10,利用fread函数读取二进制文件的前10个字节。最后使用fclose函数关闭文件。

二、读取文本文件

#include &ltstdio.h>
int main() {
    FILE *fp;
    char buffer[100];
    fp = fopen("data.txt", "r"); //以文本方式打开文件
    fread(buffer, sizeof(char), 100, fp); //读取100个字节
    fclose(fp);

    return 0;
}

不同于二进制文件,文本文件需要以不同的方式读取。在代码中,我们使用fopen函数以r方式打开文件,r表示以文本方式读取文件。然后定义一个char类型的数组buffer,长度为100,利用fread函数读取文本文件的前100个字节,最后使用fclose函数关闭文件。

三、产生截断效果

#include &ltstdio.h>
int main() {
    FILE *fp;
    char buffer[100];
    fp=fopen("data.txt", "r");
    fread(buffer, sizeof(char), 100, fp);
    fclose(fp);
    printf("%s\n", buffer);

    return 0;
}

如果读取的字节数大于文件实际的大小,fread函数会自动产生截断效果。在代码中,我们打开一个只有5个字符的文本文件,然后读取100个字节并保存到buffer数组中,最后使用printf函数输出buffer中的字符串。由于读取的字节数大于文件实际大小,所以输出结果中会出现一些奇怪的字符。

四、读取指定长度

#include &ltstdio.h>
int main() {
    FILE *fp;
    char buffer[100];
    fp = fopen("data.txt", "r");
    fseek(fp, 5, SEEK_SET); //移动文件指针到第5个字符处
    fread(buffer, sizeof(char), 10, fp); //读取10个字符
    fclose(fp);
    buffer[10] = '\0'; //添加字符串结束标志
    printf("%s\n", buffer);

    return 0;
}

fread函数可以读取任意长度的数据,但是我们也可以指定读取的长度。在代码中,我们首先使用fseek函数移动文件指针到第5个字符处,然后利用fread函数读取10个字符,并保存到buffer数组中。最后使用printf函数输出buffer中的字符串,注意要手动添加字符串结束标志。

五、读取成员为struct类型的数据

#include &ltstdio.h>
struct student {
    char name[20];
    int age;
    float score;
};
int main() {
    FILE *fp;
    struct student st;
    fp = fopen("data.bin", "rb");
    fread(&ampst, sizeof(struct student), 1, fp); //读取一个struct成员
    fclose(fp);
    printf("Name: %s\nAge: %d\nScore: %.2f\n", st.name, st.age, st.score);

    return 0;
}

fread函数不仅可以读取基本数据类型,还可以读取struct类型的数据。在代码中,我们定义了一个名为student的struct类型,包含3个成员:name、age和score。然后我们利用fopen函数以二进制方式打开文件,利用fread函数读取一个struct成员并保存到st结构体中,最后使用printf函数输出st中的成员信息。