Возвращаемый массив строк

Я пытался заставить это работать в течение многих часов теперь, но я, может казаться, не получаю голову вокруг этого.

Я пытаюсь записать функцию, которая может возвратить массив строк.

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

/**
 * This is just a test, error checking ommited
 */

int FillArray( char *** Data );

int main()
{
    char ** Data; //will hold the array

    //build array
    FillArray( &Data );

    //output to test if it worked
    printf( "%s\n", Data[0] );
    printf( "%s\n", Data[1] );

    return EXIT_SUCCESS;
}


int FillArray( char *** Data )
{
    //allocate enough for 2 indices
    *Data = malloc( sizeof(char*) * 2 );

    //strings that will be stored
    char * Hello =  "hello\0";
    char * Goodbye = "goodbye\0";

    //fill the array
    Data[0] = &Hello;
    Data[1] = &Goodbye;

    return EXIT_SUCCESS;
}

Я, вероятно, становлюсь путавшим с указателями где-нибудь, потому что я получаю следующий вывод:

здравствуйте!
Отказ сегментации

5
задан Kewley 12 July 2010 в 02:28
поделиться

1 ответ

Да, вы перепутали косвенные указания указателя, элементы массива данных должны быть установлены следующим образом:

(*Data)[0] = Hello;
(*Data)[1] = Goodbye;

В функции Data points в массив, это не сам массив.

Еще одно примечание: вам не нужно явно указывать символы \ 0 в строковых литералах, они автоматически завершаются нулевым символом в конце.

10
ответ дан 13 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: