Stavo scrivendo una funzione per convertire un numero decimale in binario, che ritorna come un puntatore di caratteri

due errori:il primo è che mi ero dimenticato di allocare la memoria per il puntatore,la seconda è che ho sbagliato l'inizializzazione di un array... il comilatore compila senza fiatare...

il risultato è che la funzione ritorna la stringa giusta senza uso di malloc O_o

codice:
 
char* dectobin(int decimale);
char* dectobin(int decimale)
{
int I,contatore;
char* binario;
char arraybin[I]; //-----------??????????????
//---------------------------il seguente blocco calcola la lunghezza dell'equivalente binario
I=0;
contatore=decimale;
while(contatore != 0)
   {
   contatore/=2;
   I++;
   }
arraybin[I]='\0'; //-----------preparo l'array per diventare pseudo-stringa
//-------------------------- il seguente blocco riempie l'array
for(--I;I>0 || I==0;I--)
   {
   decimale % 2 == 0 ? arraybin[I]='0' : arraybin[I]='1';
   decimale /= 2;
   }
//---------------------------dopo di che assegno l'indirizzo e ritorno il puntatore
binario=&arraybin[0];
return binario;
}
il vettore di caratteri relativo al puntatore ritornato lo ho stampato nella main con printf senza problemi,da notare che se si sposta la dichiarazione di arraybin dopo il ciclo while,il posto corretto, le celle all'indirizzo del puntatore si svuotano nel passaggio alla main come norma.

qualcuno è cosi gentile da svelarmi l'arcano ? XD