Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: loxo en 26 de Junio de 2003, 06:51:57 PM

Título: Strings :S
Publicado por: loxo en 26 de Junio de 2003, 06:51:57 PM
                                Buenas, tengo una matriz asi definida :

char * modelo_coche[99] = { "Clase A", "Clase C", "Clase E220" };

char nueva_marca[9]


Y lo que deseo hacer, esque despues , dentro de el programa , se puedan ir añadir mas marcas de coches y lo intento de esta manera :
scanf("%s",nueva_marca);

modelo_coche[4]=nueva_marca;


El problema radica , en que no lo introduce  :?: . ¿Me podeis intentar aclarar el porqué?
He estado buscando codigo, pero no encuentro ningun ejemplo u algo que me lo aclare.

Gracias por adelantado  :)                                
Título: Strings :S
Publicado por: ShAq en 26 de Junio de 2003, 07:33:28 PM
                                Buenas, prueba con esto.



scanf("%s", &nueva_marca);



no estoy muy puesto en funciones de C, pero creo que
es asi.

saludos.                                
Título: .....
Publicado por: Grugnorr en 26 de Junio de 2003, 08:30:42 PM
                                Sips


PD: Odio los printf() y scanf() (éste aún más), aprende a usar los streams de c++, es un consejo ;)                                
Título: Strings :S
Publicado por: MaSteR en 26 de Junio de 2003, 08:45:40 PM
                                nada joder, scanf KK, :P

strncpy(modelo_coche[4], nueva_marca, HastaElCaracterN);

o

este para tu caso es mejor y con menos artificios:

sprintf(modelo_coche[4], "%s", nueva_marca);                                
Título: Strings :S
Publicado por: HgH en 27 de Junio de 2003, 12:00:15 AM
                                mmmm... creo que no

Shaq: "&nueva_marca" sería un puntero a puntero a char... creo que el compilador se te quejaría y además no funcionaría.

Master: "sprintf(modelo_coche[4], "%s", nueva_marca)", copiaría la cadena a la que apunta "nueva marca" en la posición de memoria apuntada por modelo_coche[4]. Esto tiene el problema de que en modelo_coche[4] en principio hay un valor indefinido, con lo cual, puedes estar machacando cualquier cosa.

Loxo, si lo quieres hacer en C puro y duro, yo haría algo como esto:


int Tamaño = strlen(modelo_coche);    // Tamaño de la cadena

modelo_coche[4] = malloc(Tamaño);   // Reservar memoria para la nueva cadena

strcpy(modelo_coche[4],nueva_marca); //Copiamos la cadena



Al acabar, acuerdate de liberar la memoria que hayas reservado...

De todas maneras, si vas a trabajar con cadenas, mírate las STL.                                
Título: Strings :S
Publicado por: MaSteR en 27 de Junio de 2003, 12:37:55 AM
                                ya pero supongo q reservara memo.n obstante el compilador lo administra.Si no prueba :P                                
Título: Strings :S
Publicado por: Mars Attacks en 27 de Junio de 2003, 12:57:55 AM
                                Yo voy a dar una alternativa más chunga que no funcionará porque a estas horas uno lleva rato con el cerebro apagado:



while((c=getchar())!='n') {modelo_coche[i][j++]=c;}



y te ahorras el cosaesaintermedia.
Ale, que vengan los mecánicos y arreglen eso.
c es de tipo char y modelo_coche una matriz bidimensional, con tantas i como filas necesites y tantas j's como letras vaya a tener cada valor. En tu caso 9, creo. Puedes poner también una condición que te avise de que no te pasas de j=9.
Dulces noches.                                
Título: Strings :S
Publicado por: ethernet en 27 de Junio de 2003, 08:08:06 AM
scanf normalmente sucks -> usar fgets para indicar tamaño del buffer
sprintf normalmente sucks-> usar snprintf para idem.

Yo no se porque no os pasais a c++ y usais std::string ;))
Título: Strings :S
Publicado por: HgH en 27 de Junio de 2003, 08:44:08 AM
                               
Citarya pero supongo q reservara memo.n obstante el compilador lo administra.Si no prueba :P

No Master, el compilador no administra nada de nada... ¿cómo sabe el compilador que longitud de cadena se va a leer?¿y si en vez de 4 ó 5 carácteres, fuera un fichero de texto de 1 ó 2 Mb?... posiblemente el programa se te fuera al carajo...

Saludoncios                                
Título: Strings :S
Publicado por: samsaga2 en 27 de Junio de 2003, 09:00:52 AM
                                Como comenta HgH el compilador no administra nada de memoria. De hecho la mayoria de bugs de programas escritos en c/c++ vienen de problemas de punteros como el que nos detallas.

Siempre nos quedaran las STL :-D std::string is your friend. La clase string de las STL si que maneja automaticamente la memoria.

Y al primero que me utilize la funcion scanf en algun programa servidor le mando un sopapo que para que.