ayuda array char

Iniciado por LAULAU12, 24 Enero 2015, 20:56 PM

0 Miembros y 1 Visitante están viendo este tema.

LAULAU12

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

patilanz

#1
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 (cpp) [Seleccionar]
vector<char[120]> nombres;
nombres.push(nombre);



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

Saludos

vangodp

Si necesitas X numeros de nombres con eso te puede servir:


#include <stdio.h>
#include <stdlib.h>
#define MAXNOMBRES 5
#define MAXLETRAS 120

int main (){
   int contador=0;
   char nombre[MAXNOMBRES][MAXLETRAS] = {0};
   
   while ( contador < MAXNOMBRES ){
       scanf ( "%119[^\n]%*c", &nombre[contador][0] );
       
       contador ++;
   }
   

   printf("\n");
   for ( contador = 0; contador < MAXNOMBRES; contador++ ){
       printf("%s\n", &nombre[contador][0]);
   }
   
   getchar();
   return 0;
}

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 ;)

LAULAU12

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];

patilanz

Código (cpp) [Seleccionar]

char Jose[128] = "Jose";
char nombre[MAXNOMBRES][128] = 0;
strcpy(nombre[0],Jose);
strcpy(nombre[1],Maria);
...


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

LAULAU12

He probado como dices los vectores con la función strcpy y no me da error.

char listado[100][128]

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


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




Gracias por vuestra ayuda.

patilanz

Quita el 128
Código (cpp) [Seleccionar]
printf("%s\n", ficheros[i][128]);

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

En plan:

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

LAULAU12

No puedo usar string, porque estoy en C, no C++

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


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..