#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
char *item;
};
int main(void) {
int i;
char n[100];
struct node **a, *b;
a = malloc(sizeof(*a));
for (i=0; i<3; i++) {
fgets(n, 100, stdin);
b = malloc(sizeof(*b));
b->item = (char*)(b+1);
strcpy(b->item, n);
a[i] = b;
}
for (i=0; i<3; i++) printf("%s\n", a[i]->item);
}

このポインタの配列a[i]->itemを、2次元配列a[i][j]->itemとして実現したいのですがどうすればよろしいでしょうか?
a[i][j]->item = b;
としてもうまくいかないので・・・