Discrepancia de tamaño de archivo C

Estoy tratando de aprender C, y actualmente estoy trabajando en un script de juguete. En este momento, simplemente abre un archivo de texto, lo lee char por char y lo escupe en la línea de comando.

Miré cómo ver el tamaño de un archivo (usando fseek () y luego ftell ()), pero el resultado que devuelve no coincide con el número que obtengo al contar los caracteres en un ciclo while mientras itero el archivo.

Me pregunto si la discrepancia se debe a que Windows usa \ r \ ny no solo \ n, ya que la discrepancia parece ser # newlines + 1.

A continuación se muestra el script en el que estoy trabajando:

#include <stdio.h>
#include <stdlib.h>

int main()
{
        FILE * fp = fopen("test.txt", "r");

        fseek(fp, 0, SEEK_END);
        char * stringOfFile = malloc(ftell(fp));
        printf("allocated %d characters for file\n", ftell(fp));
        fseek(fp,0,SEEK_SET);//reset pointer

        char tmp = getc(fp); //current letter in file
        int i=0;
        while (tmp != EOF) //End-Of-File (defined in stdio.h)
        {
                *(stringOfFile+i) = tmp;
                tmp = getc(fp);
                i++;
        }
        fclose(fp);
        printf("Turns out we had %d characters to store.\nThe file was as follows:\n", i);
        printf("%s", stringOfFile);
}

Y la salida que obtengo (con un archivo de prueba simple que puedes ver en la salida) es:

allocated 67 characters for file
Turns out we had 60 characters to store.
The file was as follows:
line1
line2
line3
line4
line5
(last)line6

lmnopqrstuvw▬$YL Æ

donde los bits de cola de la impresión parecen ser basura al asignar demasiada memoria a la cadena.

Gracias de antemano por cualquier ayuda / respuesta que pueda proporcionar!

Respuestas a la pregunta(2)

Su respuesta a la pregunta