elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:55  


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.

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

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Problema con strcat
« en: 21 Enero 2012, 23:58 »

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
    strcat(aux, nombre);
   strcat(aux, ", nacido el ");
   strcat(aux, dia);
   strcat(aux, "/");
   strcat(aux, mes);
 
   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: 382


Ver Perfil
Re: Problema con strcat
« Respuesta #1 en: 22 Enero 2012, 00:23 »

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

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema con strcat
« Respuesta #2 en: 22 Enero 2012, 00:28 »

Lo acabo de hacer ahora con sprintf, y tampoco. Me sale lo mismo...

Este es el código entero:


Código
#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");
   gets(nombre);
 
   printf("Introduce el dia en que naciste");
   gets(dia);
 
   printf("Introduce el mes en que naciste");
   gets(mes);
   sprintf(aux,"%s, nacido el %s/%s",nombre,dia,mes);
 
 
 
   printf("%s\n",aux);
 
   system("pause");
   return 0;
}
 

Gracias.
En línea
RHL


Conectado Conectado

Mensajes: 968


mental


Ver Perfil
Re: Problema con strcat
« Respuesta #3 en: 22 Enero 2012, 02:36 »

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: 382


Ver Perfil
Re: Problema con strcat
« Respuesta #4 en: 22 Enero 2012, 02:47 »

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
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

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema con strcat
« Respuesta #5 en: 22 Enero 2012, 11:15 »

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 por DickGumshoe » En línea
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Problema con strcat
« Respuesta #6 en: 22 Enero 2012, 14:58 »

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

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema con strcat
« Respuesta #7 en: 22 Enero 2012, 17:46 »

Ah, vale, se me había olvidado ponerlo.

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

Código
#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");
   gets(nombre);
 
   printf("Introduce el dia en que naciste");
   gets(dia);
 
   printf("Introduce el mes en que naciste");
   gets(mes);
   sprintf(aux,"%s, nacido el %s/%s",nombre,dia,mes);
 
 
 
   printf("%s\n",aux);
 
   system("pause");
   return 0;
}

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

Código
#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");
   gets(nombre);
 
   printf("Introduce el dia en que naciste");
   gets(dia);
 
   printf("Introduce el mes en que naciste");
   gets(mes);
 
   strcat(aux, nombre);
   strcat(aux, ", nacido el ");
   strcat(aux, dia);
   strcat(aux, "/");
   strcat(aux, mes);
 
   printf("%s\n",aux);
 
   system("pause");
   return 0;
}
 

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

Código
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 por DickGumshoe » En línea
satu

Desconectado Desconectado

Mensajes: 263

Siempre aprendiendo


Ver Perfil WWW
Re: Problema con strcat
« Respuesta #8 en: 22 Enero 2012, 19:16 »

Hola


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

Código
aux[60]={};

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


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

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
strcpy(aux, nombre);
strcat(aux, ", nacido el ");
strcat(aux, dia);
strcat(aux, "/");
strcat(aux, mes);
 

Saludos
En línea

Breakbeat como forma de vida
Sagrini

Desconectado Desconectado

Mensajes: 104

Visit las Vegas ;)


Ver Perfil WWW
Re: Problema con strcat
« Respuesta #9 en: 22 Enero 2012, 23:20 »

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

Un saludo. Sagrini
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Problema con strcat
« Respuesta #10 en: 23 Enero 2012, 14:22 »

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
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema con strcat
« Respuesta #11 en: 23 Enero 2012, 14:28 »

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.
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema con strcat
« Respuesta #12 en: 23 Enero 2012, 22:28 »

Muchas gracias a todos por responder. Me habéis aclarado las dudas muy bien.

Saludos.
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
strcat y strcpy en Windows32 ?
Programación C/C++
peristrema 2 980 Último mensaje 5 Enero 2007, 15:26
por peristrema
Problema strcat
Programación C/C++
germandc 6 1,258 Último mensaje 13 Abril 2008, 11:42
por ~~
unir 2 cadenas de texto SIN SRTCPY Y STRCAT
Programación C/C++
alter733 3 2,855 Último mensaje 9 Septiembre 2009, 03:53
por aguml
strcat
Programación C/C++
<<<-Underwar->>> 4 1,856 Último mensaje 26 Abril 2011, 05:37
por <<<-Underwar->>>
Cabecera HTTP + Winsock + strcat()
Programación C/C++
Riki_89D 5 728 Último mensaje 6 Octubre 2011, 11:43
por madpitbull_99
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines