fwrite en C dando diferentes valores en los archivos de salida

¿Por qué los archivos de salida son diferentes cuando uso fwrite en otra función VERSUS fwrite en la misma función?

output1.txt contiene un valor de basura como Ê, que NO es correcto

output2.txt contiene "b", que es correcto

#include <stdio.h>
#include <string.h>

void writeData(char *buf, char *path) {
    FILE *fp1;
    fp1 = fopen(path, "a");
    fwrite(&buf, sizeof(char), strlen(buf), fp1);
}

int main () {


    char buf[2] = "a";
    char buf2[3] = "yb";
    char file1_path[12] = "output1.txt";
    char file2_path[12] = "output2.txt";
    memset(buf, 0, sizeof(buf));
    memcpy(buf, &buf2[1], strlen(buf2));
    printf("%s\n", buf);

    writeData(buf, file1_path);

    FILE *fp2;
    fp2 = fopen(file2_path, "a");
    fwrite(&buf, sizeof(char), strlen(buf), fp2);

   return(0);
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta