需求:設計通訊錄結構,支援單一聯繫人儲存多個電話號碼(最多 10 個),提供初始化、新增、顯示功能。
#define MAX_PHONES 10
#define NAME_LEN 30
typedef struct {
char name[NAME_LEN];
char *phones[MAX_PHONES]; // 指標陣列,指向動態分配的字串
int count; // 當前號碼數量
} Contact;
void contact_init(Contact *c, const char *name) {
strncpy(c->name, name, NAME_LEN - 1);
c->name[NAME_LEN - 1] = '\0';
c->count = 0;
for (int i = 0; i < MAX_PHONES; i++) c->phones[i] = NULL;
}
bool contact_add_phone(Contact *c, const char *phone) {
if (c->count >= MAX_PHONES) return false;
size_t len = strlen(phone) + 1;
c->phones[c->count] = malloc(len);
if (!c->phones[c->count]) return false;
memcpy(c->phones[c->count], phone, len);
c->count++;
return true;
}
void contact_display(const Contact *c) {
printf("Name: %s\n", c->name);
for (int i = 0; i < c->count; i++) {
printf(" Phone %d: %s\n", i + 1, c->phones[i]);
}
}
void contact_destroy(Contact *c) {
for (int i = 0; i < c->count; i++) {
free(c->phones[i]);
c->phones[i] = NULL;
}
c->count = 0;
}
int main(void) {
Contact c;
contact_init(&c, "王小二");
contact_add_phone(&c, "13123454435");
contact_add_phone(&c, "13123454123");
contact_add_phone(&c, "13123454356");
contact_display(&c);
contact_destroy(&c);
return 0;
}
掌握「結構體 + 指標陣列 + 動態記憶體」模式,是 C 語言實現變長資料集合的基礎範式。