Autor
|
Tema: Problema con strcat (Leído 6,097 veces)
|
DickGumshoe
|
Hola. Estoy realizando un programa que pida por separado tu nombre, día de nacimiento, y mes, y que después lo una en una sola cadena. Yo tengo esto:
Y, al compilar, si pongo, por ejemplo: Nombre: Nombre Día: 09 Mes: 12 Sale como resultado: "Nombre, nacido el /12". Falta el 09... ¿Qué estoy haciendo mal? Gracias. Saludos.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Habra que revisar el fragmento donde pides los datos, ya que strcat requiere dos cadenas. Supongo el tipo de "nombre", "dia" y "mes" es "array de caracteres", ¿Correcto?
Una forma mas corta es mediante sprintf o, si solo se imprime en la salida estándar, printf.
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
DickGumshoe
|
Lo acabo de hacer ahora con sprintf, y tampoco. Me sale lo mismo... Este es el código entero: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ char nombre[40],aux[60]; char dia[2],mes[2]; printf("Introduce tu nombre"); printf("Introduce el dia en que naciste"); printf("Introduce el mes en que naciste"); sprintf(aux ,"%s, nacido el %s/%s",nombre ,dia ,mes ); return 0; }
Gracias.
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
pues a mi con printf si me funciono, que compilador usas? y para strcat incializa las cadenas: char nombre[40]={0}; char aux[60]={0}; char dia[2]={0}; char mes[2]={0};
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
El programa tiene errores básicos, si no tienes un curso o libro de calidad te aconsejo que consigas uno. Puedes revisar las recomendaciones utilizando el motor de búsqueda de los foros. En C las cadenas son secuencias de caracteres seguidas de un '\0' para indicar el final de esta. Si declaras un array de dos elementos tipo char: char dia[2],mes[2];
Tanto "dia" como "mes" solo pueden almacenar cadenas de un solo carácter ya que el restante se debe reservar para el '\0'. Eso se pasa por el arco del triunfo debido a que utilizas la función "gets". Por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico|Para solucionarlo debes cambiar el numero de elementos de esos dos arrays a tres y utilizar la función "fgets" (o una propia) para leer cada linea de la entrada estándar. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
DickGumshoe
|
Ah, ¡muchísimas gracias! Se me había olvidado que había también un caracter nulo...
Por cierto, en los sitios que he estado visitando para ver la función fgets; por lo que veo, hablan de ficheros (todavía no he llegado a esa parte en el manual que estoy siguiendo). Y no sé si será por haber usado gets; pero ahora el resultado del programa da bien, exceptuando que antes de mi nombre salen cuatro caracteres raros...
Gracias.
Saludos.
EDITO: Con sprintf, lo que acabo de decir, me lo ha hecho bien. Sin embargo, con strcat no...
|
|
« Última modificación: 22 Enero 2012, 11:18 am por DickGumshoe »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
EDITO: Con sprintf, lo que acabo de decir, me lo ha hecho bien. Sin embargo, con strcat no... Si deseas ayuda primero debes publicar el código fuente (si no lo haces no hay forma de solucionar el problema). Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
DickGumshoe
|
Ah, vale, se me había olvidado ponerlo. Con sprintf, que queda bien el resultado, tengo esto: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ char nombre[40],aux[60]; char dia[3],mes[3]; printf("Introduce tu nombre"); printf("Introduce el dia en que naciste"); printf("Introduce el mes en que naciste"); sprintf(aux ,"%s, nacido el %s/%s",nombre ,dia ,mes ); return 0; }
Pero, con strcat, me salen caracteres extraños antes del nombre: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ char nombre[40],aux[60]; char dia[3],mes[3]; printf("Introduce tu nombre"); printf("Introduce el dia en que naciste"); printf("Introduce el mes en que naciste"); return 0; }
EDITO: Estaba intentándolo, y al declarar la variable aux, he puesto esto: aux[60]={};
Y ahora me sale bien. ¿Será porque no le di antes un valor a aux? Gracias. Saludos.
|
|
« Última modificación: 22 Enero 2012, 17:48 pm por DickGumshoe »
|
En línea
|
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
Hola EDITO: Estaba intentándolo, y al declarar la variable aux, he puesto esto: aux[60]={};
Y ahora me sale bien. ¿Será porque no le di antes un valor a aux? El problema está aquí:
Ya que como bien sabes strcat() se utiliza para concatenar cadenas, entonces lo que hace es añadir detrás del carácter '\0' de aux lo que hay en nombre, pero al no estar inicializado aux, puede que no tenga el carácter '\0', por eso falla. Una solución sería inicializar aux como has hecho o en lugar de concatenar, copiar para darle el primer valor:
Saludos
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
Sagrini
|
No me he molestado en leer el resto de mensajes, pero te dejo la solución tal cual: DIA lo declaras como entero, y necesitas pasarle a strcat una cadena. Lee sobre las funciones atoi () e itoa().
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
strcat
Programación C/C++
|
<<<-Basura->>>
|
4
|
5,748
|
26 Abril 2011, 05:37 am
por <<<-Basura->>>
|
|
|
Cabecera HTTP + Winsock + strcat()
Programación C/C++
|
Riki_89D
|
5
|
3,947
|
6 Octubre 2011, 11:43 am
por madpitbull_99
|
|
|
Problemas con strcmp y strcat
Programación C/C++
|
francisco11
|
1
|
2,807
|
31 Mayo 2013, 19:06 pm
por rir3760
|
|
|
uso de strcat
Programación C/C++
|
m@o_614
|
5
|
3,320
|
22 Diciembre 2013, 22:07 pm
por rir3760
|
|
|
Espacios en concatenación strcat.
« 1 2 »
Programación C/C++
|
programator11
|
13
|
7,612
|
7 Agosto 2014, 20:05 pm
por rir3760
|
|