2010-07-12 18 views
5

Ich habe versucht, dies für ein paar Stunden zu arbeiten, aber ich kann nicht scheinen, meinen Kopf drum herum.Return Array von Strings

Ich versuche, eine Funktion zu schreiben, die in der Lage ist, ein Array von Zeichenfolgen zurückzugeben.

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

Ich bin wahrscheinlich mit den Zeiger irgendwo, weil ich die folgende Ausgabe gemischt zu werden:

hallo
Segmentation Fault

+2

Sie brauchen '\ 0' nicht am Ende eines Strings. Wenn Sie die Anführungszeichen verwenden, fügt der Compiler das Zeichen "\ 0" hinzu. Sie brauchen nur das '\ 0', wenn Sie Ihre Zeichenfolgen wie folgt deklarieren: char Hallo [] = {'h', 'e', ​​'l', 'l', 'o', '\ 0'};' –

+1

I Ich weiß, dass ich ein Ärgernis bin, aber bitte befreie das, was du malloziert hast. Es ist eine gute Übung, und wenn Sie es immer tun, während Sie Code schreiben, werden Sie weniger oft vergessen. – Daniel

+0

Ich wusste, dass ich den Nullabschluss nicht brauchte, aber aus irgendeinem Grund einschloss, danke, dass ich darauf hingewiesen habe. Danke Dan, normalerweise, aber das war nur ein Test. Vielen Dank. – Kewley

Antwort

10

Ja, haben Sie Ihren Zeiger Indirekt gemischt, die Mitglieder

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

In der Funktion: die Datenanordnung sollte so eingestellt werden,Punkte zu einem Array, es ist kein Array selbst.

Noch ein Hinweis: Sie müssen keine expliziten \0 Zeichen in Ihren String-Literalen eingeben, sie sind automatisch null-terminiert.

+0

Ich habe das ursprünglich versucht und konnte nicht verstehen, warum es nicht funktioniert hat, aber ich habe es ohne die Klammern gemacht. Danke vielmals!! :) – Kewley