Nella funzione in questione ci sono diversi errori gravi. Non puoi usare la strcat su RemoteName, visto che si tratta di un puntatore ad una stringa contenuta nella tabella stringhe dell'eseguibile (leggi questo post per spiegazioni in merito). Inoltre quando scrivi itoa(n,str,10); stai dicendo al computer di andare a scrivere su una locazione di memoria sconosciuta, visto che non hai inizializzato il puntatore str. Una correzione rapida potrebbe essere questa:
codice:
char * createRemoteName()
{
static char RemoteName[256];
srand(time(0));
_snprintf(RemoteName, sizeof(RemoteName), "User%d",rand());
return RemoteName;
}
. Occhio però che la funzione in questione risulta non rientrante per via della variabile static (ma se non fosse static verrebbe restituito al chiamante l'indirizzo di una variabile locale, che però cesserebbe di esistere all'uscita della funzione); una versione migliore della funzione (in cui il buffer e le sue dimensioni sono fornite dal chiamante) può essere questa:
codice:
char * createRemoteName(char * buffer, size_t bufsize)
{
srand(time(0));
_snprintf(buffer, bufsize, "User%d",rand());
return buffer;
}
/* Esempio di come chiamarla: */
char remoteName[256];
createRemoteName(remoteName, sizeof(remoteName));
/* Ora il nome è nella variabile "remoteName" */
/* ... */
.
In ogni caso ti consiglio di ristudiarti per bene la gestione delle stringhe in C.