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


 


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Concatenacion de texto mediante puntero - Problema
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Concatenacion de texto mediante puntero - Problema  (Leído 202 veces)
Curioso0078

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Concatenacion de texto mediante puntero - Problema
« en: 15 Marzo 2017, 19:27 »

Hola, como estan? Tengo el siguiente problema. Tengo una funcion que dada dos cadenas, debe de concatenarlas, el problema empieza es que me devuelve cualquier cosa, muchos espacios en blanco.
Código
  1. struct textoenstruct;
  2.  
  3. typedef textoenstruct *puntero_a_struct;
  4.  
  5. struct textoenstruct {
  6.  char caracteres[21];
  7.  nat longitud;
  8. };
  9.  
  10. puntero_a_struct concatenar_texto(puntero_a_struct t1, puntero_a_struct t2) {
  11. puntero_a_struct final = new textoenstruct[strlen(t1 ->caracteres)+strlen(t2 ->caracteres)];
  12. strcat(final->caracteres, t1 ->caracteres);
  13. strcat(final->caracteres, t2 ->caracteres);
  14. /* si es mayor a 20 eliminar todo el resto */
  15. if ((strlen(t1 ->caracteres)+strlen(t2 ->caracteres)) > 20) {
  16.  
  17. for(int i = 20;i <= strlen(final->caracteres);i++) {
  18. final->caracteres[i] = '\0';
  19.  
  20. } }
  21.  
  22. return final;
  23. }
Tengo que hacerla mediante punteros, es un tema que me cuesta mucho(memoria dinamica). Esto es lo que hace la funcion:

Creo "textoenstruct" mediante new, el cual tiene de longitud (strlen(t1 ->caracteres)+strlen(t2 ->caracteres)), ya que los estoy concatenando (Pero tambien concatena el espacio en blanco) lo cual, ahora que lo pienso, contradice el concepto de memoria dinamica
ya que le estoy asignando un tamaño estatico, luego digo que en caso que la longitud del vector sea mayor a 20, coloque todos los caracteres posteriores como "\0" ya que esto seria como que estuvieran borrados cierto?
Entonces tengo un nuevo vector con los primeros 20 elementos del texto concatenado, pero en la practica el resultado es diferente, tiene muchos espacios en blanco

Y con esta linea asi como esta, el programa no compila:
Código
  1. for(int i = 20;i <= strlen(final->caracteres);i++)
  2.  
Nop entiendo cual es el problema de colocar esto asi


En línea

MAFUS


Desconectado Desconectado

Mensajes: 893



Ver Perfil
Re: Concatenacion de texto mediante puntero - Problema
« Respuesta #1 en: 15 Marzo 2017, 20:58 »

No debes hacer
Código
  1. strcat(final->caracteres, t1 ->caracteres);
porque lo primero que hace la función es buscar el caracter '\0' de la cadena final. Al no haberla inicializada a 0 esta contiene datos aleatorios y '\0' puede estar en cualquier sitio. Una vez que strcat encuentra este carácter nulo empezará a copiar t1 ahí.

Para solucionarlo cambia strcat por strcpy que copia desde el principio de la cadena.

Por otra parte: es de mala práctica esconder puntero detrás de un typedef. Mejor si dejas los punteros vistos.


En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines