| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 103 人关注过本帖
标题:如何把一个文件完整的读入内存并返回首地址呢?
只看楼主 加入收藏
a451410
Rank: 2
等 级:论坛游民
帖 子:86
专家分:98
注 册:2018-3-4
结帖率:80.77%
收藏
已结贴  问题点数:5 回复次数:1 
如何把一个文件完整的读入内存并返回首地址呢?
我看书上只写了从文件读内容,像文件写内容.但是如果我把一个文件内容全部读出来,
暂时放在哪里呢?用数组还是用malloc在堆里申请内存,应该申请多大的空间来存放呢?
我总不能用一个while(1)循环,然后fgetc一直读到EOF这种方式来计数吧?
c的标准库里有预定义的方法吗?
搜索更多相关主题的帖子: 内容 文件 内存 地址 读入 
2024-11-26 21:56
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:238
专家分:1810
注 册:2023-6-29
收藏
得分:5 
程序代码:
#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;
}
7 天前 11:05
快速回复:如何把一个文件完整的读入内存并返回首地址呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024800 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved