在指標陣列中使用 malloc 時,不清楚 char *a[5] 與 char **p 的差異,以及為什麼 p 似乎不需要 malloc 就能運作。
char *a[5] 是在棧上配置 5 個指標的陣列,不需要 malloc。char **p 是二級指標,若要在堆上配置指標陣列,才需要 p = malloc(5 * sizeof(char*))。p = a,則 p 指向棧上的 a,不需要額外 malloc。char *a[5];
char **p;
p = a; // p 現在指向棧上的 a,無需 malloc
// 若要在堆上配置:
p = (char**)malloc(5 * sizeof(char*));
for (int i = 0; i < 5; i++) {
p[i] = (char*)malloc(20 * sizeof(char));
gets(p[i]);
}