Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Strings :S

Iniciado por loxo, 26 de Junio de 2003, 06:51:57 PM

« anterior - próximo »

loxo

                                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  :)                                
lt;-- Cuando pensaba que ya nada mas podria pasarme ... te conoci..... -->

ShAq

                                Buenas, prueba con esto.



scanf("%s", &nueva_marca);



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

saludos.                                

Grugnorr

                                Sips


PD: Odio los printf() y scanf() (éste aún más), aprende a usar los streams de c++, es un consejo ;)                                
hat the hells!

MaSteR

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

HgH

                                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.                                
gH _ TLOTB
..................
"No queremos estar obligados, por nada ni nadie, a pensar sólo en lo que es más comercial. Siempre seremos, antes que nada, programadores"

- Equipo de Zigurat -

MaSteR

                                ya pero supongo q reservara memo.n obstante el compilador lo administra.Si no prueba :P                                

Mars Attacks

                                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.                                

ethernet

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

HgH

                               
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                                
gH _ TLOTB
..................
"No queremos estar obligados, por nada ni nadie, a pensar sólo en lo que es más comercial. Siempre seremos, antes que nada, programadores"

- Equipo de Zigurat -

samsaga2

                                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.