Путаница с передачей массива указателей символов по ссылке - PullRequest
0 голосов
/ 25 августа 2018

Как я могу передать массив указателей символов по ссылке? Я попытался передать с &tokens и разыменовать в func(), но он все равно не будет работать.

Вот мой код:

#include <stdio.h>

void func(char* tokens[10])
{
    char word[10] = "Hello\0";
    tokens[0] = word;
}

int main()
{
    char* tokens[10];

    func(tokens);
    printf("%s", tokens[0]);

    return 0;
}

Результат:

He����

1 Ответ

0 голосов
/ 25 августа 2018

Вам необходимо динамически распределить память, используя malloc(), чтобы вернуть и затем отменить выделение памяти, используя free().Возвращать локальную переменную из функции было бы неправильно, потому что эта память находится в стеке и не будет доступна, когда функция завершит свое выполнение.

Вот ваш рабочий код:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void func(char* tokens[10])
{
    char* word = malloc( 10 );
    strcpy( word, "Hello!" );
    tokens[0] = word;
}

int main() 
{
    char* tokens[10];

    func(tokens);
    printf("%s", tokens[0]);

    free( tokens[0] );

    return 0;
}

Вывод:

Hello!

Вот живой пример: https://ideone.com/LbN2NX

...