Я пытался заставить это работать в течение многих часов теперь, но я, может казаться, не получаю голову вокруг этого.
Я пытаюсь записать функцию, которая может возвратить массив строк.
#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;
}
Я, вероятно, становлюсь путавшим с указателями где-нибудь, потому что я получаю следующий вывод:
здравствуйте!
Отказ сегментации
Да, вы перепутали косвенные указания указателя, элементы массива данных должны быть установлены следующим образом:
(*Data)[0] = Hello;
(*Data)[1] = Goodbye;
В функции Data
points в массив, это не сам массив.
Еще одно примечание: вам не нужно явно указывать символы \ 0
в строковых литералах, они автоматически завершаются нулевым символом в конце.