如何让我的程序跳过uint32_t,然后开始将其余的二进制数据读入C中的结构?

我已经在下面包含了我的代码。我让它读取并打印二进制文件的第一行。文件的其余部分应该放在一个包含字符串、浮点数和uint32_t的结构中,虽然它可以很好地编译和运行,但在打印每个结构时,我得到了非常错误的值。我不知道哪里出了问题。我对C不是很熟悉,所以我很难理解这个问题。我在下面有我的输出的图像。

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>


typedef struct Record
{
    char name[20];
    float gpa;
    uint32_t age;
} Record;


// Driver program
int main ()
{
    FILE *in;
    struct Record record;

    in = fopen("input.bin", "rb+");

    char *num = (char *)malloc(sizeof(uint32_t));
    fgets(num, 2, in);
    printf("%d\n", *num);

    if (in == NULL)
{
     return 3;
}

while(fread(&record, sizeof(struct Record), 1, in)){
    printf ("name = %s gpa = %f age: %d\n", record.name, record.gpa, record.age);
}

fclose (in);

return 0;
}

我还尝试了另一种方法,但也不起作用。

int main(int argc, char* argv[]){


in = fopen("input.bin", "rb+");
char *num = (char *)malloc(sizeof(uint32_t));
fgets(num, 2, in);
printf("%d\n", *num);



while(!feof(in)) {
 
    Student st;

    char name[20];
    fread(&st.name, sizeof(char),1,in);
    
    float gpa;
    fread(&st.gpa, sizeof(float),1,in);
    
    uint32_t age;
    fread(&st.age, sizeof(uint32_t),1,in);
    
    
 
    printf("%d out of %d:\n", 1, *num);
    printf("Name: %s\n",st.name);
    printf("GPA: %.1f  (%s) \n",st.gpa, grade(gpa));
    printf("Age: %" PRIu32 "\n\n\n",st.age);
    
}
    
fclose(in);

这种方法给我带来了一个错误。这个解决方案目前让我摸不着头脑。

First Approach Output Second Approach Output

转载请注明出处:http://www.intsu.net/article/20230507/2106642.html