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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  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 1,690 veces)
Curioso0078

Desconectado Desconectado

Mensajes: 5


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

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: 1.603



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

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Seleccionar dicho texto con el puntero y pasarlo a un text
Programación Visual Basic
erick185 3 1,683 Último mensaje 1 Julio 2006, 06:37 am
por erick185
No veo tíldes al obtener texto mediante winsock
Programación Visual Basic
BlaineMonkey 3 2,542 Último mensaje 28 Junio 2011, 15:02 pm
por raul338
Texto siguiendo puntero en html (duda)
Desarrollo Web
IMPEESA 2 3,359 Último mensaje 27 Septiembre 2011, 03:33 am
por IMPEESA
Ayuda en problema de concatenacion simple .bash
GNU/Linux
RicGeo 2 2,211 Último mensaje 2 Julio 2014, 05:16 am
por RicGeo
Copiar texto mediante código
Programación C/C++
Gunhack 5 2,462 Último mensaje 11 Julio 2016, 03:31 am
por + 1 Oculto(s)
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines