我有两个这样的结构:
typedef struct user{
char nick[NICKSIZE];
char name[NAMESIZE];
int n_messages;
int n_following;
int n_followers;
following *arr_following;
following *arr_unfollowed;
}user;
typedef struct user_pos {
char nick[6];
int position_in_file;
}user_pos;
我想创建一个用户并将其插入到二进制文件中,但我还想跟踪新用户在user_pos
结构中存储位置的位置,以便我以后可以通过fseek获取()
void insert_user(char *input_a, char *input_b){
user *new_user = malloc(sizeof(user));
strcpy(new_user->name, input_b);
strcpy(new_user->nick, input_a);
new_user->n_following = 0;
new_user->n_messages = 0;
new_user->n_followers = 0;
new_user->arr_following = malloc(sizeof(following));
new_user->arr_unfollowed = malloc(sizeof(following));
FILE *fp = fopen("data_base.bin", "ab+");
fwrite(&new_user, sizeof(new_user),1,fp);
user_pos *new_user_pos = malloc(sizeof(user_pos));
strcpy(new_user_pos->nick, input_a);
new_user_pos->position_in_file = ????
(...)
}
我究竟应该放在这里:new_user_pos->position_in_file = ????
然后fseek()函数如何检索项目?
提前致谢。
答案 0 :(得分:2)
您可以在ftell()
之前使用fwrite()
来获取文件中的位置(即写入开始的字节)。
您可以稍后使用fseek(fp, position_in_file, SEEK_SET)
跳转到该位置。
确保处理每个函数的返回代码 - 例如,如果磁盘已满,则写入可能会失败。