Foros del Web » Programación para mayores de 30 ;) » C/C++ »

mal retorno de texto

Estas en el tema de mal retorno de texto en el foro de C/C++ en Foros del Web. Hola que tal, en estos momentos me encuentro programando una dll para que se ejecute con una aplicación de VB6.0, la estoy desarrollando con VC++ ...
  #1 (permalink)  
Antiguo 23/11/2007, 10:42
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 19 años, 5 meses
Puntos: 50
mal retorno de texto

Hola que tal, en estos momentos me encuentro programando una dll para que se ejecute con una aplicación de VB6.0, la estoy desarrollando con VC++ 6.0, en estos momentos me encuentro haciendo un método solo para saber como se utiliza, pero me esta generando errores, el método recibe como parámetro un char* como sigue:

Código:
char* _stdcall devuelveCadenaMayus(char *cadena)
{
	_strupr(cadena);
	strcpy(cadena," hola mundo");
	return cadena;
}
el problema esta que en la salida, el texto que me tiene que regresar no me lo regresa, por ejemplo, si

cadena = "soy un novato"

entonces me debería retornar "SOY UN NOVATO hola mundo"

Pero en el retorno solo me devuelve la palabra "hola", que puedo estar haciendo mal?, gracias por la ayuda
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #2 (permalink)  
Antiguo 23/11/2007, 12:29
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 7 meses
Puntos: 28
Re: mal retorno de texto

Para concatenar deberias usar strcat y no strcpy. Strcpy es para copiar una cadena.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #3 (permalink)  
Antiguo 23/11/2007, 13:24
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 19 años, 5 meses
Puntos: 50
Re: mal retorno de texto

Cita:
Iniciado por _Lucifer_ Ver Mensaje
Para concatenar deberias usar strcat y no strcpy. Strcpy es para copiar una cadena.

Saludos
Gracias por responder _Lucifer_

Fíjate que si fue un error mio el haber utilizado strcpy, acabo de modificar la dll con el siguiente código:

Código:
char* _stdcall devuelveCadenaMayus(char *cadena)
{
	strcat(cadena," hola mundo");
	_strupr(cadena);
	return cadena;
}
pero cuando yo agrego una cadena este no me devuelve nada, y mi aplicación se queda trabada y tengo que matar el proceso
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #4 (permalink)  
Antiguo 23/11/2007, 14:35
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 7 meses
Puntos: 28
Re: mal retorno de texto

Bueno, hasta donde alcanzo a ver y hasta donde probé todo esta bien. Te recomiendo que te fijes bien el tamaño de cadena, en caso de ser estático y si es dinámico con más razón aún.

Probé esto y funcionó bien en mi PC:
Código:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char *funcion(char *cadena);
char *strupr (char *cadena);

int main()
{
   char cadena[128], *res;
   strcpy(cadena, "pepe");
   printf("\n %s", cadena);
   res = funcion(cadena);
   printf("\n %s", cadena);

   return 0;
}

char *funcion(char *cadena)
{
   strcat(cadena, " hola mundo");
   strupr(cadena);
   return cadena;
}

char *strupr (char *cadena)
{
   char *ret = cadena;
   while (*a != '\0')
   {
      if (islower (*cadena))
         *cadena = toupper (*cadena);
      ++cadena;
   }
   return ret;
}
Saludos

P.D.: No estoy usando el VC++.
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #5 (permalink)  
Antiguo 23/11/2007, 15:17
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 19 años, 5 meses
Puntos: 50
Re: mal retorno de texto

Fíjate que no me había percatado bien pero "strcat" en el segundo parámetro utiliza un valor constante const char *, bue... según vi su definición.

desarrolle esta función a conforme vi tu código

Código:
	char *_stdcall devuelveCadena(char *cadena)
{
	char *valor;
	valor = (char*) malloc(0);
	strcpy(valor,cadena);
	strcat(valor," hola");
	return valor;
}

PD: Muy buena protección le diste al código con el "*a".
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.

Última edición por erick_arcini; 25/11/2007 a las 15:47 Razón: cambie el método
  #6 (permalink)  
Antiguo 25/11/2007, 04:41
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: mal retorno de texto

valor = (char*) malloc(0);

Supongo que querras al menos tener strlen de cadena y lo que vayas a agregar mas un cero para terminar a valor. Despues tendras que liberar esta memoria en algun lado ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 25/11/2007, 15:49
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 19 años, 5 meses
Puntos: 50
Re: mal retorno de texto

Cita:
Iniciado por Eternal Idol Ver Mensaje
valor = (char*) malloc(0);

Supongo que querras al menos tener strlen de cadena y lo que vayas a agregar mas un cero para terminar a valor.
Si, así es.

Cita:
Iniciado por Eternal Idol Ver Mensaje
Despues tendras que liberar esta memoria en algun lado ...
Bueno, la memoria la libero con free(valor), pero tengo el "return valor;", como puedo yo liberar esa memoria?.
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #8 (permalink)  
Antiguo 25/11/2007, 16:04
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: mal retorno de texto

Cita:
Iniciado por erick_arcini Ver Mensaje
Bueno, la memoria la libero con free(valor), pero tengo el "return valor;", como puedo yo liberar esa memoria?.
Asi esta bien con free, evidentemente cuando ya no la vayas a usar mas.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 26/11/2007, 09:48
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 19 años, 5 meses
Puntos: 50
Re: mal retorno de texto

"Este lo pueden borrar"
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #10 (permalink)  
Antiguo 26/11/2007, 09:50
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 19 años, 5 meses
Puntos: 50
Re: mal retorno de texto

Hola Eternal, después de unos contratiempos ya quedo el método

Código:
char *_stdcall devuelveCadena(char *cadena)
{
	char *valor = (char*) malloc(0);
	strcpy(valor,cadena);
        .
        .
        .
	strcat(valor,"&12345678");
	cadena = valor;
	valor = NULL;
	free(valor);
	return cadena;
}
Gracias a ti y a _Lucifer_ por la ayuda.
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #11 (permalink)  
Antiguo 26/11/2007, 09:55
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: mal retorno de texto

Cita:
Iniciado por erick_arcini Ver Mensaje
Hola Eternal, después de unos contratiempos ya quedo el método

Código:
char *_stdcall devuelveCadena(char *cadena)
{
	char *valor = (char*) malloc(0);
	strcpy(valor,cadena);
        .
        .
        .
	strcat(valor,"&12345678");
	cadena = valor;
	valor = NULL;
	free(valor);
	return cadena;
}
Gracias a ti y a _Lucifer_ por la ayuda.
Eso es equivalente a:
Código:
	strcat(valor,"&12345678");
	free(0);
	return valor;
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:05.