如何从 C 中的二进制文件中读取两种不同的数据类型?

How can I read two different data types from binary file in C?

我有以下代码:

typedef struct{
    int user_id;
    char username[100];
    char password[25];
} User;
int id = 10001;
User array[50];

...

然后是失败的重要部分(写入和读取):

FILE *f = fopen("users.dat", "w");
User aux;
int j = 0;


for(int i = 0; i < 50; i++){
                fwrite(&array[i],sizeof(array[i]),1 , f);   
            }
            fwrite(&id, sizeof(id), 1, f);  
fclose(f);
f = fopen("users.dat,"r");
while(fread(&aux, sizeof(aux), 1, f)){
        array[j++] = aux;
    }
    fread(&id, sizeof(id),1 ,f);

有人可以向我解释为什么这不起作用吗?也就是为什么它正在读取所有用户但不读取 id。我试过用一个 int 来计算用户数量并只打印这些,但效果不佳。 感谢您的帮助,如果需要,我会 post 更多代码。

你的第二个循环

while(fread(&aux, sizeof(aux), 1, f))

将读取 id - 移动到文件末尾,因此以下读取将失败。

如果您将要回读的用户记录数保存到文件中并循环获取该数字,您就可以使用它。