elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / Programación C/C++ / Re: reservar memoria para punteros en C en: 29 Mayo 2010, 18:42 pm
mm algo me funcionamal aver:

Código
  1. void obtenerLista(char ***lista)
  2. {
  3.     char buf[50];
  4.     *lista = (char**)malloc(sizeof(char*)*5);
  5.     for(int i=0; i<5; i++)
  6.     {
  7.             printf("Ingresa cadena: ");
  8.             fgets(buf, 50, stdin);
  9.             *lista[i]= (char*)malloc(sizeof(char)*strlen(buf));
  10.             strcpy(*lista[i], buf);
  11.     }
  12. }

Código
  1. int main(){
  2.  
  3.    char **lista;
  4.  
  5.    obtenerLista(&lista);
  6.  
  7.    for(int i =0; i<5; i++){
  8.        printf("grupo %d: %s", i, lista[i]);
  9.    }
  10.    for(int i=0; i<5; i++){
  11.            free(lista[i]);
  12.            }
  13.    free(lista);
  14.    retunr 0;
  15. }

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  Programación / Programación C/C++ / Re: reservar memoria para punteros en C en: 24 Mayo 2010, 21:52 pm
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
  1. char** lista;
  2. lista = (char**)malloc( sizeof(char*)*5); // reservo espacio para 5 strings
  3. lista = (char*)malloc( sizeof(char)*10); // reservo 10 bytes para 1 de los 5 strings
  4.  

ahora, para copiar 1 cadena, es corecto?:
Código
  1. 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  Programación / Programación C/C++ / Re: reservar memoria para punteros en C en: 24 Mayo 2010, 21:25 pm
Código
  1. void fnc(char** lista){
  2.    lista = (char**)malloc( sizeof(char*)*5 );
  3.    for(int i = 0; i < 5; i++){
  4.        *lista = (char*)malloc( sizeof(char)*10);
  5.        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.
  6.        }
  7. }
  8.  
  9.  
  10. int main(){
  11.  
  12. char** lista, **ptr;
  13.  
  14. fnc(lista);
  15.  
  16. ptr = lista; //para no perder el puntero
  17.  
  18. while(*ptr != NULL)
  19. {
  20.    while(**ptr != '\0')
  21.        printf("%s\n", *ptr++);
  22.    ptr++;
  23. }
  24. }//fin del main

asi? no tengo idea de como se usa
igual creo que camulle en los while para recorrer la lista
14  Programación / Programación C/C++ / Re: reservar memoria para punteros en C en: 24 Mayo 2010, 21:03 pm
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  Programación / Programación C/C++ / reservar memoria para punteros en C en: 24 Mayo 2010, 18:28 pm
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"
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines