tugouzhishen 2022-11-23 18:47 采纳率: 88.5%
浏览 10
已结题

C语言读取文件的代码改错

问题遇到的现象和发生背景

关于读二进制文件写入二进制文件的问题,结构体是固定的十六个数据总共想要一次性把这十六个全读完, 并且fseek第二个参数偏移量是结构体成员 plen,越过plen才能读下一个结构体,写了一下代码,有错误,但不知道应该怎么改,请各位帮忙看一下改一下

用代码块功能插入代码,请勿粘贴截图
#include <iostream>
#include<stdio.h>
#include<string.h>
typedef struct st_qwe
{
    unsigned header;
    unsigned version;
    unsigned plen[2];
    unsigned song[2];
    unsigned shou[2];
    unsigned ID[2];
    unsigned luyou[2];
    unsigned bao[4];
}QWE;


int main() {
    QWE* pqwe=NULL;
    QWE* p1;
    QWE* p2;
    QWE* p0;
    QWE r;
    int count=0;
    FILE* pfBIn1=fopen("E:\\qwe_cmds.bin",rb);
            if(pfBIn1==NULL)
            {
                printf("error");
                return 0;
            }
    FILE* pfBIn2=fopen("E:\\abc.bin",w);
    if(pfBIn1==NULL)
    {
        printf("error");
        return 0;
    }
    while(!feof(pfBIn1))
    {
        if(fread(&r,16,1,pfBIn1)>0)
        {
            fseek(pfBIn1,r.plen[1],SEEk_CUR);
            count++;
        }
    }
    p0=(QWE*)malloc(count*sizeof(QWE));
    pqwe=p0;
    memset=(pqwe,0,count*sizeof(QWE));
    fseek(pfBIn1,0,SEEK_SET);
    while(!feof(pfBIn1))
    {
        fread(pqwe,16,1,pfBIn1);
        pqwe++;
    }
    return 0;
}


  • 写回答

4条回答 默认 最新

  • 四海一叶秋 2022-11-23 22:04
    关注
    获得5.10元问题酬金

    表面上的编译错误改正:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct st_qwe
    {
        unsigned header;
        unsigned version;
        unsigned plen[2];
        unsigned song[2];
        unsigned shou[2];
        unsigned ID[2];
        unsigned luyou[2];
        unsigned bao[4];
    }QWE;
    int main() {
        QWE* pqwe = NULL;
        QWE* p1;
        QWE* p2;
        QWE* p0;
        QWE r;
        int count = 0;
        FILE* pfBIn1 = fopen("E:\\qwe_cmds.bin", "rb");
        if (pfBIn1 == NULL)
        {
            printf("error");
            return 0;
        }
        FILE* pfBIn2 = fopen("E:\\abc.bin", "w");
        if (pfBIn1 == NULL)
        {
            printf("error");
            return 0;
        }
        while (!feof(pfBIn1))
        {
            if (fread(&r, 16, 1, pfBIn1)>0)
            {
                fseek(pfBIn1, r.plen[1], SEEK_CUR);
                count++;
            }
        }
        p0 = (QWE*)malloc(count * sizeof(QWE));
        pqwe = p0;
        memset(pqwe, 0, count * sizeof(QWE));
        fseek(pfBIn1, 0, SEEK_SET);
        while (!feof(pfBIn1))
        {
            fread(pqwe, 16, 1, pfBIn1);
            pqwe++;
        }
        return 0;
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 创建了问题 11月23日

悬赏问题

  • ¥15 微软硬件驱动认证账号申请
  • ¥15 有人知道怎么在R语言里下载Git上的miceco这个包吗
  • ¥15 GPT写作提示指令词
  • ¥20 如何在cst中建立这种螺旋扇叶结构
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题
  • ¥15 哪位能做百度地图导航触点播报?
  • ¥15 请问GPT语言模型怎么训练?
  • ¥15 已知平面坐标系(非直角坐标系)内三个点的坐标,反求两坐标轴的夹角