Я думаю, что проблема заключается здесь -
while (i != '\0');
Вы инициализируете i
равным 0, и в цикле while вы проверяете, равен ли i NULL
. Целочисленное значение NULL
или \0
равно 0. В результате выражение ложно и ваш цикл никогда не выполняется.
Также удалите лишнюю точку с запятой в конце этой while
петли.
Из ссылки -
size_t fread (void * ptr, size_t size, size_t count, FILE * stream);
Считывает массив count элементов, каждый размером size байтов, из stream и сохраняет их в блоке памяти, указанном ptr .
Индикатор положения потока увеличивается на общее количество прочитанных байтов.
Общее количество прочитанных байтов в случае успеха (размер * количество).
Так что вам также нужно изменить функцию fread
на эту -
fread(a, sizeof(int), 100, fp1)
Аналогично, вам также нужно изменить fwrite -
fwrite(&b, sizeof(int), 1, fp2);
Отредактированный код должен выглядеть примерно так -
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CRYPT(a, b) (a ^ b)
int main(int argc, char *argv[])
{
FILE *fp1, *fp2;
int a[100], b, key;
int i = 0;
int data_read = 0;
// opens file containing string to be encrypted
if((fp1 = fopen(argv[2], "rb")) == NULL)
{
printf("Error - could not open file or file does not exist\n");
return;
}
// opens file encrypted string will be saved to
fp2 = fopen(argv[3], "wb");
// converts string to integer
key = atoi(argv[1]);
while( (data_read = fread(a, sizeof(int), 100, fp1)) > 0 )
{
while(i < data_read)
{
b = CRYPT(a[i], key);
fwrite(&b, sizeof(int), 1, fp2);
i++;
}
i=0;
}
return 0;
}