I am trying to write a program to compile with Xeon Phi and it says there is a segmentation fault? I think it is when I try to fill the arrays with the getc function. I have written this code several different formats, and I understand that this might not be the most efficient, but I need to test it out to see if it will work by parallelizing it
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//#include <omp.h>
int main()
{
    struct stat buf1;
    struct stat buf2;
    FILE *fp1, *fp2;
    int ch1, ch2;
    clock_t elapsed;
    char fname1[40], fname2[40];
    printf("Enter name of first file:");
    fgets(fname1, 40, stdin);
    while (fname1[strlen(fname1) - 1] == '\n')
    {
        fname1[strlen(fname1) -1] = '\0';
    }
    printf("Enter name of second file:");
    fgets(fname2, 40, stdin);
    while (fname2[strlen(fname2) - 1] == '\n')
    {
        fname2[strlen(fname2) -1] = '\0';
    }
    fp1 = fopen(fname1, "rb");
    if (fp1 == NULL)
    {
        printf("Cannot open %s for reading\n", fname1);
        exit(1);
    }
    fp2 = fopen(fname2, "rb");
    if (fp2 == NULL)
    {
        printf("Cannot open %s for reading\n", fname2);
        exit(1);
    }
    stat(fname1, &buf1);
    size_t size1 = buf1.st_size;
    stat(fname2, &buf2);
    size_t size2 = buf2.st_size;
    printf("Size of file 1: %zd\n", size1);
    printf("Size of file 2: %zd\n", size2);
    elapsed = clock(); // get starting time
    size_t smallest = 0;
    if(size1 < size2)
    {
        smallest = size1;
    }
    else
    {
        smallest = size2;
    }
    printf("Smallest Value: %zu\n", smallest);
    size_t i, j, k;
    size_t data[smallest];
    size_t arry1[smallest];
    size_t arry2[smallest];
    unsigned long long counter = 0;
    for(i = 0; i < smallest; i++)
    {
        data[i] = 1;
        arry1[i] = getc(fp1);
        arry2[i] = getc(fp2);
    }
    //#pragma omp for //reduction(+:counter)
    for(k = 0; k < smallest; k++)
    {
        if((arry1[k] ^ arry2[k]) == 0)
        {
            counter+= data[k];
        }
    }
    fclose (fp1); // close files
    fclose (fp2);
    float percent = (float)counter / (float)smallest * 100.0f;
    printf("Counter: %zu Total: %zu\n", counter, smallest);
    printf("Percentage: %.2f%\n", percent);
    elapsed = clock() - elapsed; // elapsed time
    printf("That took %.2f seconds.\n", (float)elapsed/CLOCKS_PER_SEC);
    return 0;
}
Thanks for your help in advance!
 
     
    