uso de strcat

Iniciado por m@o_614, 21 Diciembre 2013, 03:13 AM

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

m@o_614

Saludos, tengo una duda sobre el uso de la función strcat.

si yo tengo una cadena inicializada en NULL, *cadena = NULL, y con un ciclo while quiero ir agregadole caracter por caracter podria hacer esto con el strcat que me vaya concatenando al final de la cadena caracter por caracter??

algo como asi:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int i = 0;
    char *cadena = NULL,c[5],car;
    while(i < 5)
    {
        printf("Dame car\n");
        fgets(c,5,stdin);
        sscanf(c,"%c",&car);
        strcat(cadena,car);
        i++;
    }
    return 0;
}


es que el codigo no funciona y creo que es por el strcat

gracias

naderST

El primer parámetro de strcat debe ser una cadena de C con espacio suficiente para almacenar la cadena que le vas a concatenar.

http://www.cplusplus.com/reference/cstring/strcat/

m@o_614

#2
ya vi que mi error era en que no le habia asignado memoria a la cadena, pero ahora por ejemplo si le ingreso las letras a, b, c, d, e. cuando le pido que imprima ya la cadena completa me imprime con basura #Wqabcde,

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   int i = 0;
   char *cadena = NULL,buffer[5],car;
   cadena = malloc(5);
   while(i < 5)
   {
       printf("Dame car\n");
       fgets(buffer,5,stdin);
       sscanf(buffer,"%c",&car);
       sprintf(buffer,"%c",car);
       strcat(cadena,buffer);
       i++;
   }
   printf("\n%s",cadena);
   return 0;
}



rir3760

Cita de: m@o_614 en 21 Diciembre 2013, 20:27 PMvi que mi error era en que no le habia asignado memoria a la cadena, pero ahora por ejemplo si le ingreso las letras a, b, c, d, e. cuando le pido que imprima ya la cadena completa me imprime con basura #Wqabcde
1) Cuando reservas un bloque de memoria con malloc su contenido es no definido o basura.

2) strcat concatena las cadenas agregando la segunda al final de la primera. Para ello debe primero encontrar el carácter '\0' que indica el final de esta.

3) Si piensas leer cinco caracteres y almacenarlos como una cadena debes reservar un byte adicional para almacenar ahí el terminador de cadena '\0'.

En base a ello ya puedes solucionar el problema en tu programa.

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

m@o_614

muchas rir3760 ya le cambie el malloc por el calloc para que se inicialice sin basura, una última duda, como en el codigo primero le pido el valor de car y despues le hago un "cast" con sprintf para que sea una cadena, no seria mejor si simplemente  quitar el sscanf y el sprintf, me quedo con el fgets y despues se lo concateno a con strcat, porque como tiene que ser tipo cadena creo que el sprintf y el sscanf están de más

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int i = 0;
    char *cadena = NULL,buffer[5];
    cadena = calloc(5+1);
    while(i < 5)
    {
        printf("Dame car\n");
        fgets(buffer,5,stdin);
        strcat(cadena,buffer);
        i++;
    }
    printf("%s",cadena);
    return 0;
}


gracias

rir3760

Cita de: m@o_614 en 22 Diciembre 2013, 16:18 PMuna última duda, como en el codigo primero le pido el valor de car y despues le hago un "cast" con sprintf para que sea una cadena, no seria mejor si simplemente  quitar el sscanf y el sprintf, me quedo con el fgets y despues se lo concateno a con strcat
Ya que el programa solo colecta caracteres para formar una cadena basta con scanf:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int i;
   char *p;
   
   p = malloc(6);
   for (i = 0; i < 5 && scanf(" %c", p + i) == 1; i++)
      ;
   p[i] = '\0';
   
   printf("%s\n", p);
   
   return EXIT_SUCCESS;
}


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