• Viernes 8 de Noviembre de 2024, 06:46

Autor Tema:  Concatenar Cadena Punteros  (Leído 3091 veces)

jose_c27

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Concatenar Cadena Punteros
« en: Sábado 1 de Septiembre de 2007, 16:24 »
0
Saludos, yo de nuevo  , ahora tengo un problema que no se de verdad como bregarle, tengo que hacer un programa que capture 2 cadenas y que como resultado devuelva una cadena nueva con la concatenacion de ambas, la cadena nueva debe tener memoria reservada dinamicamente usando malloc, ej. cad1=Hola, cad2=Mundo.... cadf= 'Hola Mundo', no se puede utilizar strlen, stcpy, stcat.

Hasta ahora tengo esto

Código:
Código: Text
  1.  
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. /* Copia una cadena al final de la otra */
  5.  
  6. int main(void)
  7. {
  8.     char *c1="Hola";
  9.      char* c2="Amigos";
  10.     int i=0, j=0;
  11.     /* primero nos ponemos al final de la primera cadena */
  12.     while(c1[i]!='\0'){
  13.         i++;
  14.     }
  15.     /* y despues vamos agregando caracter a caracter de la cadena que queremos agregar */
  16.     while(c2[j]!='\0'){
  17.         c1[i++]=c2[j++];
  18.     }
  19.     /* cuando terminamos de meterle todos los caracteres, colocamos el caracter de fin de cadena y la devolvemos*/
  20.     c1[i]='\0';
  21.     //return c1;
  22.     putchar(*c1);
  23.     system("pause");
  24. }
  25.  
  26.  
  27.  

pero esto me explota

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Concatenar Cadena Punteros
« Respuesta #1 en: Sábado 1 de Septiembre de 2007, 22:40 »
0
Se puede usar sprintf ?

Hay otra funcion un tanto más alejada:
memcpy ?
Por sierto, el problema debe estar en:
Citar
putchar(*c1);
usa printf

cheroky

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Concatenar Cadena Punteros
« Respuesta #2 en: Jueves 6 de Septiembre de 2007, 10:01 »
0
Las declaraciones
Código: Text
  1. char *c1="Hola";
  2. char* c2="Amigos";
  3.  
son punteros a cadenas literales, cualquier intento de escribir en este espacio hara que el programa reviente. Si tienes que usar un tercer buffer con memoria dinamica, primero debes calcular la longitud de ambas cadenas, en base a esto solicitar memoria con malloc/calloc y concatenar las cadenas en este buffer.

S2.
Nunca me haria socio de un club donde admitieran a alguien como yo.

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Re: Concatenar Cadena Punteros
« Respuesta #3 en: Martes 11 de Septiembre de 2007, 15:19 »
0
Yo tengo una duda. Las cadenas de caracteres definidas en el propio código, por ejemplo char *cadena = "Hola" tienen, en este caso, 5 caracteres? Es decir, yo pensaba que era solo cuando se leía de fichero usando por ejemplo getline si tenía el '\0' del fin de linea, pero pensé que en punteros a char declarados en el codigo no pasaba eso.

Es más, yo tenía la idea de que era solo los string a los que le pasaba eso.
Entonces, si se puede, solo hay que hacer dos bucles que, con un puntero auxiliar, p:

Código: Text
  1.  
  2. int contador = 0;
  3. p = cadena1;
  4. int tope1, tope2;
  5.  
  6. while ( *p != '\0' ){
  7.     p++;
  8.     contador++;
  9. }
  10. tope1 = contador;
  11.  
  12. p = cadena2;
  13. while ( *p != '\0' ){
  14.     p++;
  15.     contador++;
  16. }
  17.  
  18. tope2 = contador - tope1;
  19. char *concatenada = ( char * ) malloc ( contador * sizeof(char) );
  20.  
  21. for ( int i = 0&#59; i < tope1&#59; ++i )
  22.     concatenada[i] = cadena1[i];
  23.  
  24. for ( int i = 0&#59; i < tope2; ++i )
  25.     concatenada[tope1 + i] = cadena2[i];
  26.  
  27.  
  28.  

Ya solo basta hacer el printf

Saludos!