Передача двойных указателей в функцию для получения строки в C - PullRequest
0 голосов
/ 08 мая 2018

Это мой код:

Я пытаюсь передать строку через функцию void с двойным указателем.

void modify(char** double_pointer) {
    //define a char pointer 
    char* pointer = malloc(5*sizeof(char));
    strcpy(pointer, "test");
    printf("%s\n", pointer);                       //prints test

    // point double_pointer to pointer
    double_pointer = malloc(sizeof(char*));
    *double_pointer = pointer;
    printf("%s\n", *double_pointer);              //prints test
}

int main() {
    //pointer to a pointer
    char* double_pointer = NULL;
    modify(&double_pointer);
    printf("%s\n", *double_pointer);              // seg. fault
}

Почему печать * double_pointer в main приводит к ошибке сегментации?

Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 08 мая 2018

%s ожидает char *. Не разыменовывайте указатель в main(). Там это не двойной указатель, это уже правильный тип. Вам лучше переименовать его в pointer, чтобы не путать себя.

int main() {
    char* pointer = NULL;
    modify(&pointer);
    printf("%s\n", pointer);
}

Кроме того, в modify() не следует выделять память для double_pointer.

// point double_pointer to pointer
<strike>double_pointer = malloc(sizeof(char*));</strike>
*double_pointer = pointer;
printf("%s\n", *double_pointer);              //prints test
...