Если заранее известна длина предполагамых строк в массиве (например 15), а также количество самих строк (например 5), то можно сделать 2-мерный массив:
char Arr[5][15];
тогда обращение к нему будет такое:
Arr[0] - это указатель на 1 строку, Arr[1] - на 2-ю и.т.д (будьте внимательны Arr[n] будет иметь тип
char *)
или
Arr[0][0] - 1-й символ 1 строки, (Arr[n][m] будет иметь тип просто
char)
Arr[0][1] - 2-й символ 1 строки,
Arr[1][0] - 1-й символ 2-й строки,
Arr[1][1] - 2-й символ 2-й строки, думаю понятно...
Если же в перспективе размер самих строк будет неизвестен заранее, тогда придется пользоваться динамическим выделением памяти... Но советую, для начала, этого не делать... Лучше сделайте обычный массив с запасом

Если неизвестно количество самих строк можно использовать связанный список (он тоже основан на динамическом выделении памяти), но тоже не рекомендую им пользоваться, если не чувствуете уверенности.

Пользуйтесь 2-мерным массивом заданной размерности.
Это поможет вам избежать лишних и неприятных ошибок.