Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DickGumshoe en 21 Enero 2012, 23:58 pm



Título: Problema con strcat
Publicado por: DickGumshoe en 21 Enero 2012, 23:58 pm
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:

Código
  1.    strcat(aux, nombre);
  2.    strcat(aux, ", nacido el ");
  3.    strcat(aux, dia);
  4.    strcat(aux, "/");
  5.    strcat(aux, mes);
  6.  
  7.    printf("%s\n",aux);

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.


Título: Re: Problema con strcat
Publicado por: rir3760 en 22 Enero 2012, 00:23 am
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


Título: Re: Problema con strcat
Publicado por: DickGumshoe en 22 Enero 2012, 00:28 am
Lo acabo de hacer ahora con sprintf, y tampoco. Me sale lo mismo...

Este es el código entero:


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(){
  6.  
  7.    char nombre[40],aux[60];
  8.    char dia[2],mes[2];
  9.  
  10.    printf("Introduce tu nombre");
  11.    gets(nombre);
  12.  
  13.    printf("Introduce el dia en que naciste");
  14.    gets(dia);
  15.  
  16.    printf("Introduce el mes en que naciste");
  17.    gets(mes);
  18.    sprintf(aux,"%s, nacido el %s/%s",nombre,dia,mes);
  19.  
  20.  
  21.  
  22.    printf("%s\n",aux);
  23.  
  24.    system("pause");
  25.    return 0;
  26. }
  27.  

Gracias.


Título: Re: Problema con strcat
Publicado por: x64core en 22 Enero 2012, 02:36 am
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};
 


Título: Re: Problema con strcat
Publicado por: rir3760 en 22 Enero 2012, 02:47 am
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:
Código
  1. 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| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)

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


Título: Re: Problema con strcat
Publicado por: DickGumshoe en 22 Enero 2012, 11:15 am
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...


Título: Re: Problema con strcat
Publicado por: rir3760 en 22 Enero 2012, 14:58 pm
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


Título: Re: Problema con strcat
Publicado por: DickGumshoe en 22 Enero 2012, 17:46 pm
Ah, vale, se me había olvidado ponerlo.

Con sprintf, que queda bien el resultado, tengo esto:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(){
  6.  
  7.    char nombre[40],aux[60];
  8.    char dia[3],mes[3];
  9.  
  10.    printf("Introduce tu nombre");
  11.    gets(nombre);
  12.  
  13.    printf("Introduce el dia en que naciste");
  14.    gets(dia);
  15.  
  16.    printf("Introduce el mes en que naciste");
  17.    gets(mes);
  18.    sprintf(aux,"%s, nacido el %s/%s",nombre,dia,mes);
  19.  
  20.  
  21.  
  22.    printf("%s\n",aux);
  23.  
  24.    system("pause");
  25.    return 0;
  26. }

Pero, con strcat, me salen caracteres extraños antes del nombre:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(){
  6.  
  7.    char nombre[40],aux[60];
  8.    char dia[3],mes[3];
  9.  
  10.    printf("Introduce tu nombre");
  11.    gets(nombre);
  12.  
  13.    printf("Introduce el dia en que naciste");
  14.    gets(dia);
  15.  
  16.    printf("Introduce el mes en que naciste");
  17.    gets(mes);
  18.  
  19.    strcat(aux, nombre);
  20.    strcat(aux, ", nacido el ");
  21.    strcat(aux, dia);
  22.    strcat(aux, "/");
  23.    strcat(aux, mes);
  24.  
  25.    printf("%s\n",aux);
  26.  
  27.    system("pause");
  28.    return 0;
  29. }
  30.  

EDITO: Estaba intentándolo, y al declarar la variable aux, he puesto esto:

Código
  1. aux[60]={};

Y ahora me sale bien. ¿Será porque no le di antes un valor a aux?

Gracias.

Saludos.



Título: Re: Problema con strcat
Publicado por: satu en 22 Enero 2012, 19:16 pm
Hola


EDITO: Estaba intentándolo, y al declarar la variable aux, he puesto esto:

Código
  1. aux[60]={};

Y ahora me sale bien. ¿Será porque no le di antes un valor a aux?


El problema está aquí:
Código
  1. strcat(aux, nombre);
  2.  

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:
Código
  1. strcpy(aux, nombre);
  2. strcat(aux, ", nacido el ");
  3. strcat(aux, dia);
  4. strcat(aux, "/");
  5. strcat(aux, mes);
  6.  

Saludos


Título: Re: Problema con strcat
Publicado por: Sagrini en 22 Enero 2012, 23:20 pm
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().


Título: Re: Problema con strcat
Publicado por: rir3760 en 23 Enero 2012, 14:22 pm
No. En sus siguientes mensajes DickGumshoe aclara que todas las variables son de tipo "array de caracteres", el problema era una combinación de capacidad insuficiente (en los arrays) mas el uso de la función "gets".

Un saludo


Título: Re: Problema con strcat
Publicado por: Eternal Idol en 23 Enero 2012, 14:28 pm
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().

La proxima vez lee el hilo antes de responder, por respeto a todos los que participan, gracias.


Título: Re: Problema con strcat
Publicado por: DickGumshoe en 23 Enero 2012, 22:28 pm
Muchas gracias a todos por responder. Me habéis aclarado las dudas muy bien.

Saludos.