Pertanyaan saya sederhana...Saya telah mendeklarasikan struct berikut:
struct Address {
int id;
int set;
char *name;
char *email;
};
struct Database {
struct Address rows[512];
};
struct Connection {
FILE *file;
struct Database *db;
};
Sekarang setelah jelas, saya menginisialisasi "Database" saya di dalam "Koneksi" saya dengan beberapa Alamat tiruan. Saya kemudian mengambil database ini dan menyimpannya ke dalam file di dalam struct "Koneksi" saya dengan:
void Database_write(struct Connection *conn){
rewind(conn->file);
int rc = fwrite(conn->db, sizeof(struct Database), 1, conn->file);
if(rc != 1){
die("Failed to write database.\n",conn);
}
rc = fflush(conn->file);
if(rc == -1){
die("Cannot flush database.\n",conn);
}
Semuanya berfungsi dengan baik ketika saya memiliki jumlah baris yang telah ditentukan di dalam struct "Database" untuk Alamat saya, yaitu 512. Namun, bagaimana jika saya ingin membuat jumlah baris secara dinamis? Seperti mungkin param diteruskan ke suatu fungsi? Saya sudah mencoba menggunakan yang berikut ini...
struct Database {
struct Address *rows;
};
Dan mengalokasikan ruang ke penunjuk ini dengan:
conn->db->rows = (struct Address*) malloc(sizeof(struct Address)*max_rows);
Dengan max_rows menjadi param yang diteruskan ke suatu fungsi...Tapi, sekarang masalahnya adalah ketika saya pergi dan mencoba menyimpan ini ke file di dalam struct "Koneksi" saya, saya hanya menyimpan penunjuk "struct Address *rows;" dan bukan data dengan ruang yang dialokasikan untuk itu. Adakah saran tentang cara menghemat ruang yang dialokasikan ini atau memiliki array yang telah ditentukan di dalam suatu struct dan kemudian mengembangkannya secara dinamis?
Terima kasih sebelumnya!
malloc()
kestruct Address *
? atau Anda melakukannya karena Anda melihatnya di tempat lain? Saya menanyakan hal ini karena akan jauh berbeda jika Anda HARUS melakukan cast, bahasanya akan sangat berbeda. Selain itu,conn->db->rows
mungkin mereferensikan penunjukNULL
jika Anda tidak berhati-hati. Dan apa itudie()
?, itu membuat kodenya terlihat seperti PHP, dan itu PHP jadi, itu PHP. - person Iharob Al Asimi   schedule 09.05.2017name
danemail
juga merupakan pointer? Anda hanya perlu menulis teks ke file, atau melakukan apa yang komentar ini disarankan. - person Iharob Al Asimi   schedule 09.05.2017