FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Concatenar 2 string en MSVC
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM

Concatenar 2 string en MSVC

Posted: Wed Jul 06, 2022 08:02 PM
Hola,

Necesito concatenar 2 nombres de variables pero estoy teniendo problemas al usar strcat.

Code (fw): Select all Collapse
strcat( query, dbname );


Como lo hago cuando utilizo con MSVC

Gracias de antemano.

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Concatenar 2 string en MSVC

Posted: Thu Jul 07, 2022 05:05 AM

Entiendo que los estás haciendo en lenguaje C.

  1. Asegúrate de que la primera variable tiene espacio suficiente para que le puedas concatenar la segunda

  2. Aseguraté de que ambas variables terminan en cero (end of string)

Si copias aqui tu código, te lo revisamos y te funcionará de 10 :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 607
Joined: Mon Mar 04, 2013 04:32 PM

Re: Concatenar 2 string en MSVC

Posted: Fri Jul 08, 2022 07:44 AM
Hola amigo.

Sobre todo como dice el Master Antonio, publica tu codigo pero
esta funcion no te deberia dar problemas si las cadenas a concatenar estan inicializadas

y tambien ten en cuenta lo que haces despues ya que la funcion creo recordar que
retorna un puntero a la cadena ampliada, esto es interesante ya que te permite pasarla
a la funcion printf directamente.

Ah supongo que incluyes la cabecera string.h

Code (fw): Select all Collapse
    char destino[] = "Saludos ";
    char origen[] = "amigos de FWH";
    printf("Cadena final : %s\n",  strcat(destino,origen));


El C es muy potente pero muy "puñetero", las luchas que he tenido yo y creo que todos con ese lenguaje. :-)

Saludos

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Concatenar 2 string en MSVC

Posted: Fri Jul 08, 2022 10:11 AM

Estimado Jose,

con todo el cariño del mundo, ese código que has puesto generaría un GPF

La razón es simple, el compilador de C ha reservado memoria para los bytes que le has indicado en la primera cadena:

char destino[] = "Saludos ";

es decir tiene un total de 9 bytes (8 bytes más el byte cero de terminación de cadena). Además de eso, esa memoria no es "dinámica" por lo que solo debe ser de lectura, pero bueno, eso puede aceptarse.

El problema es que cuando tu hagas strcat() vas a intentar meterle un total de "amigos de FWH" 14 bytes (13 más el byte para el cero) y obviamente eso no cabe en los 9 bytes de "destino", lo cual va a provocar un GPF porque te sales de lo que mide esa memoria.

Como se resuelve esto ?

  1. Tienes que darle espacio suficiente a la primera cadena para que acepte una concatenación de la segunda. Asi como la primera mide 9 y vamos a meterle 14 bytes más, pues al menos deberiamos declarar:

char destino[ 23 ];

ahora incializariamos esa cadena con su contenido inicial:
strcpy( destino, "Saludos " );
asi ya tenemos "Saludos " dentro de esa variable y además tenemos espacio para lo que le vamos a añadir ahora, haciendo:
strcat( destino, origen );

y efectivamente como dices, strcat() devuelve el puntero (que apunta al comienzo de "destino") y puedes imprimirlo directamente, etc

El C es una maravilla, prueba de ello es Harbour que está programado integramente en C, pero conocer bien estos detalles es lo que hace que nuestro codigo sea sólido y estable como una roca :-)

un abrazo

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion