Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Ghalad

#11
mm algo me funcionamal aver:

Código (cpp) [Seleccionar]

void obtenerLista(char ***lista)
{
     char buf[50];
     *lista = (char**)malloc(sizeof(char*)*5);
     for(int i=0; i<5; i++)
     {
             printf("Ingresa cadena: ");
             fgets(buf, 50, stdin);
             *lista[i]= (char*)malloc(sizeof(char)*strlen(buf));
             strcpy(*lista[i], buf);
     }
}


Código (cpp) [Seleccionar]

int main(){

    char **lista;
   
    obtenerLista(&lista);
   
    for(int i =0; i<5; i++){
        printf("grupo %d: %s", i, lista[i]);
    }
    for(int i=0; i<5; i++){
            free(lista[i]);
            }
    free(lista);
    retunr 0;
}


lo que quiero es una lista de strings, y como nose cuantos estoy le voy a poner a la lista estaria bueno, en vez de usar malloc(sizeof(char*)*5), usar realloc. Pero bueno si funciona con malloc despues se cambia.

que esta mal de ese codigo?
#12
Si a la funcion le paso una referencia a lista, el prototipo no seria
void fnc(char*** lista); ????

entonces...
quedamos de acuerdo en que
Código (cpp) [Seleccionar]
char** lista;
lista = (char**)malloc( sizeof(char*)*5); // reservo espacio para 5 strings
lista = (char*)malloc( sizeof(char)*10); // reservo 10 bytes para 1 de los 5 strings


ahora, para copiar 1 cadena, es corecto?:
Código (cpp) [Seleccionar]
strcpy(lista[i], "mi cadena");

pensa que todo el tema de asignacion de memoria y strings se hace dentro de la funcion, no en el main.
#13
Código (cpp) [Seleccionar]
void fnc(char** lista){
   lista = (char**)malloc( sizeof(char*)*5 );
   for(int i = 0; i < 5; i++){
       *lista = (char*)malloc( sizeof(char)*10);
       strcpy(*list, cadena); //cadena es un string que se genera dentro de la misma funcion, solo que no tengo ganas de poner la funcion completa porque interviene un base de datos, pero es un string.
       }
}


int main(){

char** lista, **ptr;

fnc(lista);

ptr = lista; //para no perder el puntero

while(*ptr != NULL)
{
   while(**ptr != '\0')
       printf("%s\n", *ptr++);
   ptr++;
}
}//fin del main


asi? no tengo idea de como se usa
igual creo que camulle en los while para recorrer la lista
#14
ahhhh, bueno entonces dado mi programa...para generar la lista de strings seria correcto hacer:

void fnc(char** lista){
    lista = (char**)malloc( sizeof(char*)*5 );
    for(int i = 0; i < 5; i++){
        *lista = (char*)malloc( sizeof(char)*10);
        strcpy(*list, cadena); //cadena es un string que se genera dentro de la misma funcion, solo que no tengo ganas de poner la funcion completa porque interviene un base de datos, pero es un string.
        }
}


int main(){

char** lista, **ptr;

fnc(lista);

ptr = lista; //para no perder el puntero

while(*ptr != NULL)
{
    while(**ptr != '\0')
        printf("%s\n", *ptr++);
    ptr++;
}
}//fin del main
#15
Hola a todos, tengo una duda sobre este tema. Entiendo que si declaro:

char *cadena;
cadena = (char*)malloc( (sizeof(char)*4) + 1);

estoy declarando un puntero a un string de 5 posiciones, pj: "HOLA"+'\0'.
Entonces tengo 2 preguntas:

1ro) que diferencia hay entre:
    (char*)malloc(sizeof(char)*5);
    (char*)malloc(sizeof(char*)*5);

2do) si lo que quiero es tener una lista de strings dinamica y declaro:

char **lista;

como declaro correctamente memoria para los distintos strings que quiera agregar a la lista? supongamos que los strings, en un determinado momento, son "hola1", "hola2", "hola3"