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.                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.