Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: LAULAU12 en 24 Enero 2015, 20:56 pm



Título: ayuda array char
Publicado por: LAULAU12 en 24 Enero 2015, 20:56 pm
Saludos a todos.

Necesito ayuda. Tengo un array de char que guarda un nombre. Su contenido cambia con cada vuelta de un bucle.
   char nombre[120];

Necesito guardar en otro array todos los nombres que voy obteniendo a través de ese nombre[120].

Sería algo como un array de arrays. ¿Ideas?
gracias.
Mod: Tema modificado, evita usar mayúsculas a menos que sea necesario


Título: Re: ayuda array char
Publicado por: patilanz en 24 Enero 2015, 21:54 pm
Yo utilizaría vectores http://www.cplusplus.com/reference/vector/vector/ aunque puedes usar char ** pero tienes que saber el tamaño exacto.

Código
  1. vector<char[120]> nombres;
  2. nombres.push(nombre);


No mandes mas mensajes privados a gente aleatoria.  :rolleyes:

Saludos


Título: Re: ayuda array char
Publicado por: vangodp en 24 Enero 2015, 22:01 pm
Si necesitas X numeros de nombres con eso te puede servir:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXNOMBRES 5
  4. #define MAXLETRAS 120
  5.  
  6. int main (){
  7.    int contador=0;
  8.    char nombre[MAXNOMBRES][MAXLETRAS] = {0};
  9.  
  10.    while ( contador < MAXNOMBRES ){
  11.        scanf ( "%119[^\n]%*c", &nombre[contador][0] );
  12.  
  13.        contador ++;
  14.    }
  15.  
  16.  
  17.    printf("\n");
  18.    for ( contador = 0; contador < MAXNOMBRES; contador++ ){
  19.        printf("%s\n", &nombre[contador][0]);
  20.    }
  21.  
  22.    getchar();
  23.    return 0;
  24. }
  25.  
Como ves ese "array de arrays" uso un contador, ese es el truco.
Si necesitas mas nombres pon un numero mayor en MAXNOMBRES.

Esta criatura:  scanf ( "%119[^\n]%*c", &nombre[contador][0] ); lee maximo 119 letras, ignora el enter y pone el nulo al fin del string, un chollo. El problema es que si pasas de 119 caracteres, el resto se queda en el buffer. Para algo mas fiable debes limpiar el buffer después de cada lectura, pero si no pasas de 119 caracteres no hay problema.

Por otro lado si necesitas un programa para leer una cantidad de nombres indeterminados debes aprender a usar listas abiertas simples junto con memoria dinamica. Eso te permitiria leer "infinitos" nombres.

Suerte ;)


Título: Re: ayuda array char
Publicado por: LAULAU12 en 24 Enero 2015, 22:33 pm
El problema es que no recojo los nombres por pantalla.
entonces yo tengo nombres[128];

y necesito otro listado[100] que vaya guardando los nombres:

primera vuelta:
listado[0]=nombres[128];
segunda vuelta:
listado[1]=nombres[128];


Título: Re: ayuda array char
Publicado por: patilanz en 24 Enero 2015, 23:22 pm
Código
  1. char Jose[128] = "Jose";
  2. char nombre[MAXNOMBRES][128] = 0;
  3. strcpy(nombre[0],Jose);
  4. strcpy(nombre[1],Maria);
  5. ...
  6.  

Con vectores es mas fácil y no importa el tamaño


Título: Re: ayuda array char
Publicado por: LAULAU12 en 24 Enero 2015, 23:33 pm
He probado como dices los vectores con la función strcpy y no me da error.

Código:
char listado[100][128]

Pero si intento mostrar el contenido del nuevo vector me dice "El programa dejó de funcionar"

Código:
for (i=0;i<100;i++){
printf("%s\n", ficheros[i][128]);
}



Gracias por vuestra ayuda.


Título: Re: ayuda array char
Publicado por: patilanz en 25 Enero 2015, 00:05 am
Quita el 128
Código
  1. printf("%s\n", ficheros[i][128]);

Porque no utilizas string http://www.cplusplus.com/reference/string/string/?

En plan:

Código
  1. vector<string> nombres = {"hola","Maria"};
  2. nombres[3] = "Jose";
  3. for(int i =0;i<nombres.size();i++){
  4.     printf("%s\n",nombres[i]);
  5. }
  6.  


Título: Re: ayuda array char
Publicado por: LAULAU12 en 25 Enero 2015, 00:13 am
No puedo usar string, porque estoy en C, no C++

Creo que tendré que recurrir a vectores dinámicos... he probado lo siguiente:

Código:
	for (i=0;i<100;i++){
for (j=0;j<128;j++){
printf("%c", ficheros[i][j]);
}
printf("\n");
}

Y he visto que rellena con caracteres aleatorios el array hasta los 128 caracteres.

¿Alguna idea? No se me ocurre más..