Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: d91 en 15 Abril 2014, 15:30 pm



Título: problemas con concatenar cadenas
Publicado por: d91 en 15 Abril 2014, 15:30 pm
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
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include<stdlib.h>
  4.  
  5. int main(void)
  6. {
  7.   char destination[25];
  8.   char *blank = "-";
  9.   char dias[2];
  10.   char mess[2];
  11.   char age[4];
  12.  
  13.   int dia, anho;
  14.   int mes;
  15.  
  16.   printf("ingrese dia: ");scanf("%d",&dia);
  17.   printf("ingrese mes; ");scanf("%d",&mes);
  18.   printf("ingrese anho: ");scanf("%d",&anho);
  19.  
  20.      //int char base
  21.   itoa(dia,dias,10);  //paso entero a cadena
  22.   itoa(mes,mess,10);//aqui no hay problema porque ya debugge
  23.   itoa(anho,age,10);
  24.  
  25.   //aqui creo que esta el problema porque solo aparece el anho
  26.   strcpy(destination, dias);  //copiar a una sola variable
  27.   strcat(destination, blank);
  28.   strcat(destination, mess);   //concatenando lo demas
  29.   strcat(destination, blank);
  30.   strcat(destination, age);
  31.  
  32.   printf("\nla cadena %s", destination); //mostrando la nueva cadena
  33.   system("pause");
  34.   return 0;
  35. }
  36.  
  37.  
agradecere su orientacion,


Título: Re: problemas con concatenar cadenas
Publicado por: eferion en 15 Abril 2014, 15:38 pm
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:

Código
  1. sprintf( destination, "%s-%s-%s", dias, mess, age );

El código de arriba es equivalente a:

Código
  1. strcpy(destination, dias);
  2. strcat(destination, blank);
  3. strcat(destination, mess);
  4. strcat(destination, blank);
  5. 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.




Título: Re: problemas con concatenar cadenas
Publicado por: d91 en 15 Abril 2014, 15:53 pm
te agradezco, porque lo del fin de cadena lo habia dejado pasar por alto