gpt4 book ai didi

c - 将文件中的数据读入结构 (C)

转载 作者:太空宇宙 更新时间:2023-11-03 23:44:23 27 4
gpt4 key购买 nike

抱歉,如果此格式困惑,这是我第一次使用 stackoverflow。我正在尝试使用 fread 函数以 512 字节为单位读入 card.raw 文件,并将该 block 的前 4 个字节存储到 s1- s4 和其他 508 个字节留在字节数组中。但是,当我尝试运行它时,出现段错误。当我尝试调试时,调用 fread 函数后,argvoutptrinptr buf 值全部变为 NULL。为什么会这样,我做错了什么?

typedef uint8_t  BYTE;

//block of 512 bytes
typedef struct
{
BYTE s1;
BYTE s2;
BYTE s3;
BYTE s4;
BYTE image[508];
}
BUFFER;

int main(int argc, char* argv[])
{
//opens memory card file
FILE* inptr = fopen("card.raw", "r");

int jpgcounter = 0;

//creates jpg file
char title[7];
sprintf(title, "%d.jpg", jpgcounter);
FILE* outptr = fopen(title, "a");

//create buf (pointer) of type BUFFER
BUFFER* buf;

do
{
//creates buffer structure for storage of 512B blocks
buf = malloc(sizeof(BUFFER));

//read 512 bytes at a time & stores every 512B block into a buffer struct buf
fread(&buf, sizeof(BUFFER), 1, inptr);

if(buf->s1 == 0xff && buf->s2 == 0xd8 && buf->s3 == 0xff)
{

if 语句用于检查 buf 的前 3 个元素是否包含以下十六进制签名。我想在循环中使用 malloc 以读取 512 字节结构中的原始文件,决定如何处理 512 字节,然后连续释放它。

最佳答案

使用 fread(buf, sizeof(BUFFER), 1, inptr); 而不是 fread(&buf, sizeof(BUFFER), 1, inptr); 同样打开以二进制模式读取文件,即 "rb" 而不是 "r"

关于c - 将文件中的数据读入结构 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37671128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com