Mi riferisco al primo listato che hai postato.
Non si blocca la fscanf; si blocca una eventuale lettura fatta da una funzione C string.
Considera questo.

codice:
1 22 3 4 54 6 7 8 9 10 11 62 13 14 15  0 16 17 8 19 2 21 62 213 24 25 26 27 28 29 30  0
Qui hai 32 numeri. Se passi un array composto in questo modo, una strlen si blocca qui:

codice:
1 22 3 4 54 6 7 8 9 10 11 62 13 14 15  0
perché lo zero finale lo considera terminatore di stringa (come quasi tutte le funzioni string del C).

Tu invece hai bisogno di avere tutti e 32 i caratteri, quindi devi usare il contatore con un ciclo per sapere quando hai finito di scansionare l'array.
Se tu avessi usato un array di int, saresti stato costretto a recuperare in qualche modo la dimensione dello stesso, per scansionarlo tutto.

Per quanto riguarda il secondo listato.
Credo che l'errore sia qui. (In genere uso C++ quindi queste funzioni non le uso mai)
codice:
fscanf(f,"%c %c",&c1);   // Prelevo le prime due righe del file
Richiedi due char, ma passi solo una variabile.