Dynami c двумерный массив указателей на строки в C - PullRequest
0 голосов
/ 05 августа 2020

Я хотел бы создать динамический c двумерный массив указателей на строки, как на диаграмме ниже:

введите описание изображения здесь

Программа ниже является извлеченной частью программы, и динамическое выделение стека A, кажется, работает нормально, но у меня возникли проблемы с созданием динамического c двумерного массива указателей на ячейки 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"
}

Обновление: и комментарий, и ответ помогли решить проблему.

1 Ответ

1 голос
/ 05 августа 2020

Проблема в том, что вы копируете не указатель на строку, а первый символ строки:

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].

...