Post by ROCPost by Manu Expositotypedef unsigned char BYTE;
char * _miReturn( char * )
main()
{
BYTE Letra;
Letra = 'A';
_miReturn( Letra );
_miReturn( &Letra);
// tienes que pasar una referencia (dirección) al puntero del
parámetro.
// Si todavía te da error de tipo estricto (cosa poco probable),
// char * _miReturn( BYTE * ).
¡¡Ciudado!!
Eso es seguro sólo si defines Letra como estática (static).
En este caso en particular, como es una variable local definida en la
función main, va a tener la suerte de que la zona de memoria usada por
Letra no va a ser reutilizada por ninguna otra función, pero en una
función como esta no sería válido.
char * _miReturn ((char *) letra) {
char Letra = 'S';
return &Letra;
}
Por supuesto este ejemplo carece un poco de sentido porque ha sido una
muestra del error, no un ejemplo real.
La variable Letra tendrá sentido sólo durante la ejecución de dicha
función (se crea 'S' y todas las variables locales en una zona de
memoria llamada "heap"), una vez que salgamos de la función dicha
memoria puede ser reutilizada por cualquier otra función que sea
llamada posteriormente, por lo que los datos almacenados en ella
podrían corromperse.
Esta advertencia te la hago porque me he fijado que tu función
devuelve un (char *), de modo que corres el riesgo de cometer dicho
error.
Por otro lado, como la función necesita como parámetro un (char *)
necesitas hacer un cast (o conversión) tal y como:
_miReturn ((char *) Letra);
O bien, hacer como te ha dicho ROC y cambiar el tipo de entrada de la
función.
Un saludo.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/