Così ad occhio direi che ci sono diverse cose da aggiustare...
codice:
#include <stdio.h>

#define kfileingresso "input.txt"
#define kfileuscita "output.dat"

int main (void)
{
    unsigned char buffer[1024];
    FILE *fp_in;
    FILE *fp_out;
    int readBytes=-1;
    int exitCode=0;
    fp_in = fopen ("kfileingresso", "rb");
    if(fp_in==NULL)
    {
        fprintf(stderr,"Impossibile aprire il file d'ingresso.\n");
        return 1;
    }
    fp_out = fopen ("kfileuscita", "wb");
    if(fp_out==NULL)
    {
        fprintf(stderr,"Impossibile aprire il file d'uscita.\n");
        return 2;
    }
    for(;;)
    {
        readBytes = fread (buffer, 1, sizeof(buffer), fp_in);
        if(readBytes == 0)
        {
            puts("Copia terminata.");
            break;
        }
        fwrite(buffer, 1, readBytes, fp_out);
        if(ferror(fp_out))
        {
            fprintf(stderr,"Errore di scrittura.\n");
            exitCode=3;
            break;
        }
    }
    fclose (fp_in);
    fclose (fp_out);
    return exitCode;
}
dovrebbe leggermi un file nella stessa cartella del' eseguibile e crearmene una copia in codice binario
Mah, non so cosa tu intenda dire per "copia in codice binario", di fatto il programma te ne crea una copia esatta.
ho iniziato oggi a leggere qualcosa sul c ed è il mio primo approccio alla programmazzione quindi premetto che sono completamente ignorante in questo campo

dopo migliardi di errori sono riuscito a compilare questo codice (tra laltro copiato quasi completamente da internet) con gcc
Sappi che questo è il peggior metodo possibile per imparare un linguaggio di programmazione. Comprati un libro di C.