I made a simple script to rewrite one file contents into another. Here's code:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char filename[1024];
    scanf("%s", &filename);
    // printf("Filename: '%s'\n", filename);
    int bytesToModify; scanf("%d", &bytesToModify);
    FILE *fp;
    fp = fopen(filename, "r");
    fseek(fp, 0, SEEK_END);
    int fSize = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    printf("%d\n", fSize);
    char *buf = malloc(fSize*sizeof(char));
    for (int i = 0; i < fSize; i++) {
        buf[i] = getc(fp);
    }
    fclose(fp);
    FILE *fo;
    fo = fopen("out_file.txt", "w");
    for (int i = 0; i < fSize; i++) {
        fwrite(&buf[i], 1, 1, fo);
    }
    fclose(fo);
    return 0;
}
Even on small file like this I can see the artifact. Cyrillic sybmol 'я' is coming in the end of file.
If I'll try to rewrite executable file, i get this:

99% of file just turned to these symbols. What is wrong with my code?
I'm using CodeBlocks with GCC Compiler, version 10.1.0. My Operation System is Windows 10.
Thanks for your help.

 
     
    