首页 > 系统相关 >C语言将二进制文件写入内存malloc fopen fseek fread

C语言将二进制文件写入内存malloc fopen fseek fread

时间:2022-11-19 16:34:23浏览次数:47  
标签:fp 文件 malloc fseek buffer fread file printf size

///20221118malloc获取文件大小,并读取内存中
///
void Funcation3()
{
    //保存读入到内存中的结果
    //创建一个buffer,用来将打开的文件放入申请的内存中
    char* buffer;
    //这里保存文件长度
    long file_size = 0;
    //打开文件
    FILE* fp;//创建一个FILE类型的指针用来获取文件
    fp = fopen("notepad-32bit.exe", "rb");
    if (fp == NULL)//如果获取不正常,那么异常退出
    {
        printf("open file faild\n");
        return exit(1);
    }
    printf("当前文件指针所指位置:%x\n", fp);
    //获取文件大小,这里需要使用fseek用来移动文件指针,ftell是获取文件指针相对于文件头的偏移,所以可以通过ftell的内容获取
    //文件大小,当文件指针指向了文件尾,那么ftell的结果就是整个文件大小。
    //当前指向为程序末尾
    fseek(fp, 0, SEEK_END);
    file_size = ftell(fp);
    printf("文件大小(字节):%d\n", file_size);
    //申请内存空间,在堆中
    buffer = (char*)malloc(sizeof(char)*file_size);
    //申请空间必须进行验证
    if (buffer == NULL)
    {
        printf("申请失败\n");
    }
    //初始化申请的内存空间
    memset(buffer, 0, sizeof(char)* file_size);
    //将文件读入内存中(就是将读取的文件拷贝到内存中)
    //此时需要将文件的指针指向文件头进行读取
    fseek(fp, 0, SEEK_SET);
    fread(buffer, sizeof(char), file_size, fp);
    printf("打印buffer中的内容:%s\n", buffer);
    printf("打印buffer此时的内存地址:%x\n", &buffer);
    fclose(fp);
    free(buffer);
    buffer = NULL;
}

 

标签:fp,文件,malloc,fseek,buffer,fread,file,printf,size
From: https://www.cnblogs.com/0x200/p/16906346.html

相关文章

  • ElfReader-Elf文件类型
    ElfReader-Elf文件类型参考文献链接https://github.com/jianhong-li/ElfReaderhttps://www.cnblogs.com/lwyeric/p/13582022.htmlELF文件解析程序说明:用Java解析E......
  • malloc的实现
    1、一篇文章彻底讲懂malloc的实现(ptmalloc):https://blog.csdn.net/songchuwang1868/article/details/899515432、Glibc内存管理-ptmalloc2:https://www.cnblogs.com/mysky0......
  • 嵌入式-C语言基础:malloc动态开辟内存空间
    #include<stdio.h>#include<stdlib.h>intmain(){//char*p;//定义一个野指针:没有让它指向一个变量的地址//*p='c';//直接对野指针进行操作,会报错ch......
  • C++——new和malloc的区别
    new是关键字/操作符,而malloc是函数new一个对象的时候,不但分配内存,而且还会调用类的构造函数(当然如果类没有构造函数,系统也没有给类生成构造函数,那没法调用构造函数了)......
  • 解决:ResourceWarning: Enable tracemalloc to get the object allocation traceback
    发现一个很有意思的事情:deftearDown(self):self.driver.close()会报错:/opt/homebrew/anaconda3/envs/Selenium/bin/python/Users/mokin.li/PycharmProje......
  • 记 malloc 奇怪的bug
    介绍写了一个项目,cpu+gpu,不可避免的遇到申请GPU的内存,申请CPU的内存,CPU上的数组,赋值来赋值去遇到了奇怪的bugmallocbugsmalloc():mismatchingnext->prev_si......
  • 在应用程序中替换Linux中Glibc的malloc的四种方法_转
    转自:在应用程序中替换Linux中Glibc的malloc的四种方法--csdn打算优化系统的内存分配,接管glibc提供的内存管理,但是整个工程的代码量很大,使用malloc、realloc、calloc和free......
  • kmalloc vmalloc
     kmalloc()、kzalloc()、vmalloc()的共同特点是:用于申请内核空间的内存;内存以字节为单位进行分配;所分配的内存虚拟地址上连续;kmalloc()、kzalloc()、vmalloc()的区别......
  • malloc与指针
    1错误写法#include<stdio.h>#include<stdlib.h>#defineMaxSize10//定义最大长度typedefstruct{intdata[10];//用静态的“数组”存放数据元素......
  • C语言[char**]与[malloc]的组合使用
    简介首先!要搞懂char**是什么?我们知道char*是字符指针,是一个地址,指向一个字符串。那么char**就是指向char*的指针,也是一个地址,指向指针的指针。使用char**的时......