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

 

 


Tema destacado: Introducción a Git (Primera Parte)


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


Desconectado Desconectado

Mensajes: 389


Ver Perfil
uso de strcat
« en: 21 Diciembre 2013, 03:13 am »

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:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    int i = 0;
  8.    char *cadena = NULL,c[5],car;
  9.    while(i < 5)
  10.    {
  11.        printf("Dame car\n");
  12.        fgets(c,5,stdin);
  13.        sscanf(c,"%c",&car);
  14.        strcat(cadena,car);
  15.        i++;
  16.    }
  17.    return 0;
  18. }

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

gracias


En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: uso de strcat
« Respuesta #1 en: 21 Diciembre 2013, 07:15 am »

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/


En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: uso de strcat
« Respuesta #2 en: 21 Diciembre 2013, 20:27 pm »

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,

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    int i = 0;
  8.    char *cadena = NULL,buffer[5],car;
  9.    cadena = malloc(5);
  10.    while(i < 5)
  11.    {
  12.        printf("Dame car\n");
  13.        fgets(buffer,5,stdin);
  14.        sscanf(buffer,"%c",&car);
  15.        sprintf(buffer,"%c",car);
  16.        strcat(cadena,buffer);
  17.        i++;
  18.    }
  19.    printf("\n%s",cadena);
  20.    return 0;
  21. }

« Última modificación: 21 Diciembre 2013, 20:28 pm por m@o_614 » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: uso de strcat
« Respuesta #3 en: 22 Diciembre 2013, 01:46 am »

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
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
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
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: uso de strcat
« Respuesta #4 en: 22 Diciembre 2013, 16:18 pm »

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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    int i = 0;
  8.    char *cadena = NULL,buffer[5];
  9.    cadena = calloc(5+1);
  10.    while(i < 5)
  11.    {
  12.        printf("Dame car\n");
  13.        fgets(buffer,5,stdin);
  14.        strcat(cadena,buffer);
  15.        i++;
  16.    }
  17.    printf("%s",cadena);
  18.    return 0;
  19. }

gracias
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: uso de strcat
« Respuesta #5 en: 22 Diciembre 2013, 22:07 pm »

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
Ya que el programa solo colecta caracteres para formar una cadena basta con scanf:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int i;
  7.   char *p;
  8.  
  9.   p = malloc(6);
  10.   for (i = 0; i < 5 && scanf(" %c", p + i) == 1; i++)
  11.      ;
  12.   p[i] = '\0';
  13.  
  14.   printf("%s\n", p);
  15.  
  16.   return EXIT_SUCCESS;
  17. }

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
strcat
Programación C/C++
<<<-Basura->>> 4 5,508 Último mensaje 26 Abril 2011, 05:37 am
por <<<-Basura->>>
Cabecera HTTP + Winsock + strcat()
Programación C/C++
Riki_89D 5 3,710 Último mensaje 6 Octubre 2011, 11:43 am
por madpitbull_99
Problema con strcat « 1 2 »
Programación C/C++
DickGumshoe 12 5,555 Último mensaje 23 Enero 2012, 22:28 pm
por DickGumshoe
Problemas con strcmp y strcat
Programación C/C++
francisco11 1 2,607 Último mensaje 31 Mayo 2013, 19:06 pm
por rir3760
Espacios en concatenación strcat. « 1 2 »
Programación C/C++
programator11 13 7,040 Último mensaje 7 Agosto 2014, 20:05 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines