> Sarebbe interessante sapere come, mostra la tua soluzione

char *msg;

int main(int argc, char *argv[])
{

if ( ! messaggio( msg ) )
{
printf( "messaggio ha ritornato un valore...\n" );

if ( msg )
printf( "VALORE : [%s]\n", msg );
else
printf( "[MAIN] - qlc non va!\n" );

}
else
printf( "allocazione non riuscita!..." );

free( msg );

return 0;

}


la funzione messaggio risiede in un altro file.

int messaggio( char *testo )
{

int iRet = 0;
const char mess[] = "stringa assegnata dalla funzione.";
extern char *msg;

/*
** viene allocato lo spazio per
** scrive il messaggio.
*/

msg = (char*)malloc( 100 * sizeof( char ) );
memset( msg, '\0', 100 );

/*
** controllo se l'allocazione della
** memoria ha avuto successo.
*/

if ( msg != NULL )
{
printf( "stringa allocata : [%s]\n", msg );
printf( "da copiare : [%s]\n", mess );
memcpy( msg, mess, strlen( mess ) + 1 );
printf( "copiato : [%s]\n", testo );
return 0;
}
else
return 1;

}

ecco qua!!!