Я хочу создать двумерный массив строк с использованием указателей, поскольку, выполнив это, я позже смогу освободить динамическую c память и создать меньший или больший массив, используя тот же идентификатор (переменную).
Я использовал код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned long rows = 0;
unsigned long cols = 0;
unsigned long chrs = 30;
char ***mtx = NULL;
int rszmtx(char ***, unsigned long, unsigned long);
int main(int argc, char *argv[]) {
rszmtx(mtx, 0, 0);
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
strcpy(mtx[r][c], "[]");
}
}
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
printf("%s ", mtx[r][c]);
}
printf("\n");
}
return 0;
}
int rszmtx(char ***matrix, unsigned long y, unsigned long x) {
if (y <= 0) {
printf("Enter the number of rows: ");
scanf("%lu", &rows);
} else {
y = rows;
}
if (x <= 0) {
printf("Enter the number of cols: ");
scanf("%lu", &cols);
} else {
x = cols;
}
free(matrix);
matrix = (char ***) malloc(rows * sizeof(char **));
if (matrix == NULL)
return 1;
for (int r = 0; r < rows; r++) {
matrix[r] = (char **) malloc(cols * sizeof(char *));
for (int c = 0; c < cols; c++) {
matrix[r][c] = (char *) malloc (chrs * sizeof(char));
}
}
return 0;
}
В функции "main" я хочу вызвать функцию "rszmtx" и назначить размер для "mtx", заданного пользователем. Затем я хочу, чтобы все строки были "[]", и распечатать их. Проблема в том, что я ничего не могу ни назначить, ни напечатать. При тестировании я заметил, что если я помещаю отображение и / или печать в функцию «rszmtx», все работает нормально. Почему это так, как я могу отобразить и распечатать "mtx" вне функции "rszmtx"?