Concatenar 2 string en MSVC

Concatenar 2 string en MSVC

Postby Compuin » Wed Jul 06, 2022 8:02 pm

Hola,

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

Code: Select all  Expand view  RUN
strcat( query, dbname );


Como lo hago cuando utilizo con MSVC

Gracias de antemano.
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Concatenar 2 string en MSVC

Postby Antonio Linares » Thu Jul 07, 2022 5: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Concatenar 2 string en MSVC

Postby jvtecheto » Fri Jul 08, 2022 7: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: Select all  Expand view  RUN


    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. :D

Saludos

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 602
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Concatenar 2 string en MSVC

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 123 guests