首页 > 解决方案 > C中指向字符串的动态二维数组

问题描述

我想创建一个指向字符串的动态二维数组,如下图所示:

在此处输入图像描述

下面的程序是程序的一个提取部分,动态分配堆栈 A 似乎工作正常,但我无法创建指向 A 单元格的指针的动态二维数组。

// Global
char **stack_A;  // dynamic array of strings
char ***stack_B; // dynamic array of pointers to strings

int main(){
    stack_A = malloc(sizeof(char *)); 
    stack_B = malloc(sizeof(char **));
    function(); 
    return 0;
}

void function(){
    // example for first entry 

    char *text = "some text";
    stack_A = realloc(stack_A, sizeof(char *)*strlen(text));
    stack_A[0] = strdup(text);
   
    stack_B[0] = realloc(stack_B[0], sizeof(char **));
    stack_B[0][0] = *stack_A[0];
    printf("%s", **stack_B[0][0]); // I want to output "some text"
}

更新:评论和答案都有助于解决问题。

标签: arrayscpointersmalloc

解决方案


问题是您没有复制指向字符串的指针,而是复制字符串的第一个字符:

stack_B[0][0] = *stack_A[0];->*stack_A表示数组组中的第一个数组。它的含义与 相同stack_A[0]

*stack_A[0]表示 中的第一个字符stack_A[0]'s'

您需要复制指针,而不是第一个字母: stack_B[0][0] = *stack_A[0]变为stack_B[0][0] = stack_A[0].


推荐阅读