D'accordo sulla prima fscanf, ma se chiedi due char e passi solo una variabile, ha ragione a protestare.

Per il problema principale, devi fare una cosa simile.
codice:
char * read_file(FILE * f, int *cont ) {

     int c,i=0,neg,x;

     *cont=0;
 
     while(!feof(f)) {

        fscanf(f,"%d",&x);  (*cont)++; // Conto i numeri presenti nel file

     }

     rewind(f);


     char * str;           // Dichiaro la stringa

     str=calloc(*cont,sizeof(char));   // Alloco la memoria necessaria per contenere tutti questi numeri

     while(!feof(f)) {      // Scorro il file per salvare nella stringa i numeri che trovo

        fscanf(f,"%d",&x);

	str[i]=x;

        i++; }

  return str;   // ritorno la stringa

  }

   ....
   int counter=0;
   char *stringa = read_file(f, &counter ); 
   for (i=0; i<counter; i++) {
       printf("%c\n",stringa[i]);
   }
   free(stringa);