Вы должны быть осторожны с тем, сколько данных вы прочитали. Ваш цикл будет продолжаться в течение 16 итераций и каждый раз будет пытаться записать int в ключ. Сделайте это более 4 раз на 32-битной машине, и вы получите неопределенное поведение, так как вы будете писать вне 16-ти битных выделенных вами (16 символов) Используя вместо этого беззнаковый int, вы в порядке.
Символ табуляции в строке формата не требуется, так как пробел будет соответствовать любому пробелу.
int i;
unsigned int key[16]; // char -> int
FILE *fp;
printf ("\n ------ \n");
// open filename
fp = fopen("key.txt","r"); // a -> r
printf("reading 128 bit key:\n");
for (i = 0; i < 16; i++){
if (fscanf(fp,"%d ", &key[i]) == 1){ // tab removed.
printf ("%d \t", key[i]);
} else {
printf("Error reading key.\n");
}
}
printf ("\n ------ \n");
fclose(fp);
return 0;
Чтобы ответить на ваш вопрос, причина нулей в том, что вы открываете файл с «a», то есть добавлением. Для чтения следует использовать «r».