hace mucho que no toco C pero aquí me parece ver una incongruencia:
if( c = ' ' || c == '\n' || c == '\t' )
en [c = ' ' ] se realiza una asignación , no una comparación. Puede que eso este creando problemas.
if( c = ' ' || c == '\n' || c == '\t' )
en [c = ' ' ] se realiza una asignación , no una comparación. Puede que eso este creando problemas.