argc
не имеет никакого отношения к размеру файла, это количество аргументов командной строки. Поэтому нет причин использовать его в качестве размера буфера.
Вместо того, чтобы пытаться читать файл сразу, использовать буфер фиксированного размера и читать файл в цикле. Используйте fread()
вместо fgets()
, так как он читает только одну строку.
Для записи в выходной файл необходимо использовать fwrite()
, а не memcpy()
.
#define BUFFER_SIZE 1000
char* argument = argv[2];
char buffer[BUFFER_SIZE];
FILE *fp;
FILE *quiz_log;
fp = fopen(argument, "r");
if (fp == NULL) {
printf("Unable to open input file\n");
exit(1);
}
quiz_log = fopen("quiz.log", "a");
if (quiz_log == NULL) {
printf("Unable to open quiz.log\n");
exit(1);
}
size_t n;
while ((n = fread(buffer, 1, BUFFER_SIZE, fp)) > 0) {
fwrite(buffer, 1, n, quiz_log);
}
fclose(quiz_log);
fclose(fp);