elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con strcat
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con strcat  (Leído 5,567 veces)
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Problema con strcat
« 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.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con strcat
« Respuesta #1 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


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


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Problema con strcat
« Respuesta #2 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.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Problema con strcat
« Respuesta #3 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};
 
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con strcat
« Respuesta #4 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|

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


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Problema con strcat
« Respuesta #5 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...
« Última modificación: 22 Enero 2012, 11:18 am por DickGumshoe » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con strcat
« Respuesta #6 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
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


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Problema con strcat
« Respuesta #7 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.

« Última modificación: 22 Enero 2012, 17:48 pm por DickGumshoe » En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Problema con strcat
« Respuesta #8 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
En línea

Breakbeat como forma de vida
Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Problema con strcat
« Respuesta #9 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().
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
strcat
Programación C/C++
<<<-Basura->>> 4 5,517 Último mensaje 26 Abril 2011, 05:37 am
por <<<-Basura->>>
Cabecera HTTP + Winsock + strcat()
Programación C/C++
Riki_89D 5 3,716 Último mensaje 6 Octubre 2011, 11:43 am
por madpitbull_99
Problemas con strcmp y strcat
Programación C/C++
francisco11 1 2,612 Último mensaje 31 Mayo 2013, 19:06 pm
por rir3760
uso de strcat
Programación C/C++
m@o_614 5 3,060 Último mensaje 22 Diciembre 2013, 22:07 pm
por rir3760
Espacios en concatenación strcat. « 1 2 »
Programación C/C++
programator11 13 7,055 Último mensaje 7 Agosto 2014, 20:05 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines