如何让我的程序跳过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