Возвращаемый массив строк - PullRequest
5 голосов
/ 12 июля 2010

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

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

#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;
}

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

приветОшибка сегментации

1 Ответ

10 голосов
/ 12 июля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...