Programa C imprimiendo personajes extraños

Tengo un programa que lee el contenido de un archivo y lo guarda enbuf. Después de leer el contenido, se supone que debe copiar dos por dos caracteres en una matriz. Este código funciona bien si no intento leer un archivo, pero si intento leerlo desde un archivo, printf del búfer imprime los dos caracteres que quiero pero agrega caracteres extraños. Lo he confirmado y se está guardando correctamente en buf, no hay personajes extraños allí. No puedo entender qué pasa ... Aquí está el código:

char *buffer = (char*)malloc(2*sizeof(char));
char *dst = buffer;
char *src = buf;
char *end = buf + strlen(buf);
char *baby = '\0';
while (src<= end)
{
    strncpy(dst, src, 2);
    src+= 2;
    printf("%s\n", buffer);
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta