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 :)
Buenas, prueba con esto.
scanf("%s", &nueva_marca);
no estoy muy puesto en funciones de C, pero creo que
es asi.
saludos.
Sips
PD: Odio los printf() y scanf() (éste aún más), aprende a usar los streams de c++, es un consejo ;)
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);
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.
ya pero supongo q reservara memo.n obstante el compilador lo administra.Si no prueba :P
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.
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 ;))
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
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.