如何分配2-d字符串数组............我的意思是t[][]
是数组
{char t[0][0]}
应该存储一个字符串,
{ char t[0][1] }
应该存储一个字符串等........我们可以用{char ***t }
来完成这个..如果我应该如何处理?或者我们也可以这样做
{ char **t[10] }
,其中10是我要在数组中输入的任何字符串的最大长度...
答案 0 :(得分:0)
修改强>
要执行此操作,您必须指定第二个维度的基数和字符串的最大长度。然后使用带有sizeof
的数组名称和要分配的字符串数:
#include <stdio.h>
#include <string.h>
int main(void) {
/* 10 is the lenght of each string and 1 for the '\0'
10 is the number of strings per each 2D array
5 is the number of 2D arrays */
char (*array)[10][10+1] = malloc(5*sizeof(*array));
// Exemple
strcpy(array[0][0], "hello, world");
printf("%s\n", array[0][0]);
return 0;
}
答案 1 :(得分:0)
首先你要说:By that I mean if t[][] is the array {char t[0][0]} should store a string, { char t[0][1] }
,如果t [0] [1]会存储一个字符串,那么它不是你想要的2D数组而是一个3D数组,在2D数组中它是t [0 ]存储字符串(因为字符串是一个数组,2D数组是数组的数组),我已经说过我将向您展示如何为2D数组动态分配内存,您可以使用该原则创建一个3D一。
char **matrix = NULL;
int i ;
matrix = malloc(sizeof(char) * ROWS);
for(i = 0 ; i < COLUMNS ; i++)
matrix[i] = malloc(sizeof(char));
并且你有它,只是在完成该数组后不要忘记使用free
修改:
释放一个动态分配的2D数组,你需要free
最后你最后编辑的东西,如下所示:
for(i = 0 ; i < COLUMNS ; i++)
free(matrix[i]);
free(matrix);
答案 2 :(得分:-1)
你必须为指向char的指针分配一个指针数组,即:
char ***array = (char ***)malloc(sizeof(char**)*ARRAY_X);
然后,您必须将每个指针数组分配给chars:
for(int i = 0; i < ARRAY_X; i++){
array[i] = (char **) malloc(sizeof(char *)*ARRAY_Y);
}
最后你必须分配字符串:
for(int i = 0; i < ARRAY_X; i++){
for(int j = 0; j < ARRAY_Y; j++){
array[i][j] = (char *) malloc(sizeof(char)*ARRAY_Z);
}
}
ARRAY_X
和ARRAY_Y
和ARRAY_Z
是int,表示二维字符串数组的维度(这是一个三维字符数组)。