perchè la printf si aspetta una stringa che termina con il carattere di terminazione.
prova così
codice:
i=0;  
N=1;
 buff = (char*) malloc(N*sizeof(char)+1);
buff[N*sizeof(char)]='\0';
while (recv (sd,buff,N,0))
 {
   printf("%d) %s\n",i,buff);
    i++;
 }