Quitar espacios de una cadena 3 en C

#include <stdio.h>
#include <stdlib.h>
void quitaespacios(char *cadena, char *cadenasin);
int main()
{
 char *cad,*cadsin,vaciar;
 int numcaracteres;

 //Leemos cuántos caracteres tiene la cadena
 printf("Indique cuántos caracteres tiene la cadena: ");
 scanf("%d",&numcaracteres);

 
 /*Reservamos espacio para las cadenas */
 // Tiene numcaracteres caracteres de tipo char
 cad=(char*)malloc(sizeof(char)*(numcaracteres+1));
 cadsin=(char*)malloc(sizeof(char)*(numcaracteres+1));
 
 
 //Leemos la cadena
 printf("Introduzca la cadena: ");
 while ((vaciar = getchar()) != EOF && vaciar != '\n');
 //fflush( stdin );
 fgets(cad, numcaracteres-1,stdin);
 
 quitaespacios(cad,cadsin);
 
 //Imprimimos el resultado
 printf("La cadena es %s",cadsin); 
 
 //liberamos memoria
 free (cad);
 free (cadsin);
 return 0;
}

//Función que devuelve la misma cadena que se le pasa como argumento pero sin espacios
void quitaespacios(char *cadena, char *cadenasin)
{
 int i,j;
 i=0;
 j=0;
 while (*(cadena+i)!='\0') {
  if(*(cadena+i)!=' ')
  {
   *(cadenasin+j)=*(cadena+i);
   j++;
  }
  i++;
 }

}