C语言将二进制文件写入内存malloc fopen fseek fread
///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;
}