如何编写其中包含指针的结构
How to write struct that has pointer in it
我有一个结构,它有一个指向另一个结构的指针:
typedef struct _contacts
{
Contact *elements;
int length;
int capacity;
} Contacts;
这是我的联系人结构:
typedef struct _contact
{
int id;
char firstName[NAME_SIZE];
char lastName[NAME_SIZE];
char address[ADDRESS_SIZE];
char email[EMAIL_SIZE];
char phoneNumber[NUMBER_SIZE];
char homeNumber[NUMBER_SIZE];
} Contact;
当我尝试使用 fwrite 在二进制文件上写入联系人时,
Contacts *contacts = newEmptyContacts();
// do something with contacts...
fwrite(contacts, sizeof(Contacts), 1, file);
它写了一个指向联系人的指针,这是我不想要的。
如何沿边长和容量成员存储联系人的每个元素?
您的代码写入指向文件的指针是正常的,这就是您要求代码执行的操作。您需要编写 contacts
的 元素 而不是编写 contacts
结构。您还需要以某种方式写入联系人数量,以便读取文件的代码知道要读取多少联系人:
假设length
是实际联系人数量,capacity
是可用存储空间space,你的代码大致应该是这样的:
Contacts *contacts = newEmptyContacts();
// do something with contacts...
// write the number of contacts and capacity to the file
fwrite(&contacts.length, sizeof(contacts.length), 1, file);
fwrite(&contacts.capacity, sizeof(contacts.capacity), 1, file);
// write all contacts to the file
fwrite(contacts.elements, sizeof(Contact), contacts.length, file);
读取的代码可能是这样的:
int length;
int capacity;
// read the length from the file
fread(&length, sizeof(length), 1, file);
// read the capacity from the file
fread(&capacity, sizeof(capacity), 1, file);
// allocate a Contacts structure for length contacts
Contacts *contacts = newContacts(capacity);
// read length contacts from the file
fread(contacts.elements, sizeof(Contact), length, file);
contacts.length = length;
...
Contacts *newContacts(int capacity)
{
Contacts *contacts = malloc(capacity* sizeof(*contacts));
contacts->capacity = capacity;
contacts->length = 0;
return contacts;
}
免责声明:这是未经测试的代码,它可能包含错误并且根本没有错误检查,但你应该明白。
我有一个结构,它有一个指向另一个结构的指针:
typedef struct _contacts
{
Contact *elements;
int length;
int capacity;
} Contacts;
这是我的联系人结构:
typedef struct _contact
{
int id;
char firstName[NAME_SIZE];
char lastName[NAME_SIZE];
char address[ADDRESS_SIZE];
char email[EMAIL_SIZE];
char phoneNumber[NUMBER_SIZE];
char homeNumber[NUMBER_SIZE];
} Contact;
当我尝试使用 fwrite 在二进制文件上写入联系人时,
Contacts *contacts = newEmptyContacts();
// do something with contacts...
fwrite(contacts, sizeof(Contacts), 1, file);
它写了一个指向联系人的指针,这是我不想要的。
如何沿边长和容量成员存储联系人的每个元素?
您的代码写入指向文件的指针是正常的,这就是您要求代码执行的操作。您需要编写 contacts
的 元素 而不是编写 contacts
结构。您还需要以某种方式写入联系人数量,以便读取文件的代码知道要读取多少联系人:
假设length
是实际联系人数量,capacity
是可用存储空间space,你的代码大致应该是这样的:
Contacts *contacts = newEmptyContacts();
// do something with contacts...
// write the number of contacts and capacity to the file
fwrite(&contacts.length, sizeof(contacts.length), 1, file);
fwrite(&contacts.capacity, sizeof(contacts.capacity), 1, file);
// write all contacts to the file
fwrite(contacts.elements, sizeof(Contact), contacts.length, file);
读取的代码可能是这样的:
int length;
int capacity;
// read the length from the file
fread(&length, sizeof(length), 1, file);
// read the capacity from the file
fread(&capacity, sizeof(capacity), 1, file);
// allocate a Contacts structure for length contacts
Contacts *contacts = newContacts(capacity);
// read length contacts from the file
fread(contacts.elements, sizeof(Contact), length, file);
contacts.length = length;
...
Contacts *newContacts(int capacity)
{
Contacts *contacts = malloc(capacity* sizeof(*contacts));
contacts->capacity = capacity;
contacts->length = 0;
return contacts;
}
免责声明:这是未经测试的代码,它可能包含错误并且根本没有错误检查,但你应该明白。