2010-07-12 28 views
5

He estado tratando de hacer que esto funcione durante unas pocas horas, pero parece que no puedo entenderlo.Devuelve un conjunto de cadenas

Estoy tratando de escribir una función que pueda devolver una matriz de cadenas.

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

Soy probablemente se mezclen con los punteros en algún lugar porque me sale el siguiente resultado:

hola
fallo de segmentación

+2

No necesita '\ 0' al final de una cadena. Cuando utiliza las comillas dobles, el compilador agrega el caracter '\ 0' para usted. Solo necesita el '\ 0' si declara sus cadenas como' char Hello [] = {'h', 'e', ​​'l', 'l', 'o', '\ 0'}; ' –

+1

I Sé que estoy siendo una molestia, pero por favor libera lo que has malloc. Es una buena práctica y si siempre lo haces mientras escribes el código, lo olvidarás con menos frecuencia. – Daniel

+0

Sabía que no necesitaba el terminador nulo pero lo incluí por alguna razón, gracias por señalarlo. Gracias Dan, normalmente lo hago, pero esto fue solo una prueba. Gracias. – Kewley

Respuesta

10

Sí, usted consiguió su indirecciones puntero mezclado, los miembros de la matriz de datos se debe establecer de esta manera:

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

En la función, Datapuntos a una matriz, no es una matriz en sí.

Otra nota: No es necesario poner caracteres \0 explícitos en sus literales de cadena, son terminados en nulo automáticamente.

+0

Intenté eso originalmente y no pude entender por qué no funcionó, pero lo hice sin los corchetes. ¡¡Muchas gracias!! :) – Kewley

Cuestiones relacionadas