Первое, что у вас есть в вашем вопросе, это не 3-мерный массив char
, а 2-мерный массив указателей на char
. В C указатели и массивы - это не одно и то же.
Чтобы ответить на ваш вопрос, самый простой способ в современном C, C99, это использовать массивы переменной длины, VLA, для ваших целей. Для 3-мерного массива вы бы сделали
char szData[x][y][z];
, где x
, y
и z
- это переменные или выражения, которые определяются только во время выполнения, когда вы нажмете это объявление.
Неудобство VLA заключается в том, что вы должны быть осторожны, чтобы они не становились слишком большими для вашего стека, и что вы должны инициализировать их, присваивая отдельным записям (здесь вложенный for
-loop) .
Чтобы остаться с вашим примером 2-го массива строк
char* szData[x][y];
и тогда вам нужно будет назначить либо отдельные строки для каждого из указателей, либо установить для них 0
.
for (size_t i = 0; i < x; ++i)
for (size_t j = 0; j < y; ++j)
szData[i][j] = 0;