注册 登录
编程论坛 C语言论坛

如何把一个文件完整的读入内存并返回首地址呢?

a451410 发布于 2024-11-26 21:56, 157 次点击
我看书上只写了从文件读内容,像文件写内容.但是如果我把一个文件内容全部读出来,
暂时放在哪里呢?用数组还是用malloc在堆里申请内存,应该申请多大的空间来存放呢?
我总不能用一个while(1)循环,然后fgetc一直读到EOF这种方式来计数吧?
c的标准库里有预定义的方法吗?
1 回复
#2
yiyanxiyin2024-11-27 11:05
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *file = fopen("example.txt", "rb"); // 以二进制模式打开文件
    if (!file) {
        perror("Failed to open file");
        return EXIT_FAILURE;
    }

    // 移动到文件末尾
    fseek(file, 0, SEEK_END);
    // 获取文件大小
    long fileSize = ftell(file);
    // 移回文件开头
    fseek(file, 0, SEEK_SET);

    // 分配内存,加1用于存储空字符(如果文件内容是字符串)
    char *buffer = (char *)malloc(fileSize + 1);
    if (!buffer) {
        perror("Failed to allocate memory");
        fclose(file);
        return EXIT_FAILURE;
    }

    // 读取文件内容到缓冲区
    size_t bytesRead = fread(buffer, 1, fileSize, file);
    if (bytesRead != fileSize) {
        perror("Failed to read file");
        free(buffer);
        fclose(file);
        return EXIT_FAILURE;
    }

    // 如果文件内容是字符串,添加空字符
   
// 注意:如果文件包含二进制数据,则不应添加空字符
    buffer[fileSize] = '\0';

    // 在这里可以使用buffer,例如打印它(如果它是字符串)
   
// printf("%s\n", buffer); // 仅当文件内容是字符串时才这样做

   
// 释放内存和关闭文件
    free(buffer);
    fclose(file);

    return EXIT_SUCCESS;
}
1