Page 1 of 1

Concatenar 2 string en MSVC

PostPosted: Wed Jul 06, 2022 8:02 pm
by Compuin
Hola,

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

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


Como lo hago cuando utilizo con MSVC

Gracias de antemano.

Re: Concatenar 2 string en MSVC

PostPosted: Thu Jul 07, 2022 5:05 am
by Antonio Linares
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 :-)

Re: Concatenar 2 string en MSVC

PostPosted: Fri Jul 08, 2022 7:44 am
by jvtecheto
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


    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.

Re: Concatenar 2 string en MSVC

PostPosted: Fri Jul 08, 2022 10:11 am
by Antonio Linares
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