El problema es que usas funciones especializadas en cadenas de texto para leer datos binarios. No te va a contar los caracteres nulos ni lo que haya a partir de ellos.
Puedes usar el par fseek/ftell para obtener el tamaño del archivo en bytes o puedes ir recogiendo porciones del archivo con fred e ir dejándolos en un buffer hasta que llegues al final del archivo.
Pero no uses funciones de texto para archivos binarios.