problemas con concatenar cadenas

Iniciado por d91, 15 Abril 2014, 15:30 PM

0 Miembros y 1 Visitante están viendo este tema.

d91

hola a todos, tengo un programita que debe recibir la fecha de nacimiento con enteros y despues mostrarlo unido como una cadena, lo recibo y paso a cadena los enteros, lo unico que al copiar o concatenar a una sola cadena no me lo copia aqui el codigo:
Código (cpp) [Seleccionar]
#include <string.h>
#include <stdio.h>
#include<stdlib.h>

int main(void)
{
   char destination[25];
   char *blank = "-";
   char dias[2];
   char mess[2];
   char age[4];

   int dia, anho;
   int mes;

   printf("ingrese dia: ");scanf("%d",&dia);
   printf("ingrese mes; ");scanf("%d",&mes);
   printf("ingrese anho: ");scanf("%d",&anho);

      //int char base
   itoa(dia,dias,10);  //paso entero a cadena
   itoa(mes,mess,10);//aqui no hay problema porque ya debugge
   itoa(anho,age,10);

   //aqui creo que esta el problema porque solo aparece el anho
   strcpy(destination, dias);  //copiar a una sola variable
   strcat(destination, blank);
   strcat(destination, mess);   //concatenando lo demas
   strcat(destination, blank);
   strcat(destination, age);

   printf("\nla cadena %s", destination); //mostrando la nueva cadena
   system("pause");
   return 0;
}


agradecere su orientacion,

eferion

Para gestionar cadenas en C has de tener en cuenta que éstas han de terminar con el carácter '\0'. Es decir, "cadena" necesita de, al menos, un array de 7 caracteres ( 6 por cada letra de la palabra + 1 para el caracter nulo ).

Dicho esto, las cadenas "dias", "mess" y "age" no cumplen los requisitos.

Además, la concatenación la puedes simplificar bastante:

sprintf( destination, "%s-%s-%s", dias, mess, age );

El código de arriba es equivalente a:


strcpy(destination, dias);
strcat(destination, blank);
strcat(destination, mess);
strcat(destination, blank);
strcat(destination, age);


Como nota informativa, destination ha de tener una longitud mínima de 2 (dias) + 2 (mess) + 4 (age) + 2 (los guiones) + 1 (nulo) = 11 caracteres.



d91

te agradezco, porque lo del fin de cadena lo habia dejado pasar por alto