C中的2d字符串数组声明

时间:2013-12-26 17:20:36

标签: c arrays multidimensional-array

如何分配2-d字符串数组............我的意思是t[][]是数组     {char t[0][0]}应该存储一个字符串,    { char t[0][1] }应该存储一个字符串等........我们可以用{char ***t }来完成这个..如果我应该如何处理?或者我们也可以这样做    { char **t[10] },其中10是我要在数组中输入的任何字符串的最大长度...

3 个答案:

答案 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;
}

Live Demo

答案 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_XARRAY_YARRAY_Z是int,表示二维字符串数组的维度(这是一个三维字符数组)。