fscanf()を使用して16進値を含む.datファイルを配列にスキャンしようとしています。私のプログラムは正常にファイルをスキャンし、配列に値を入れますが、私がそれらをコンソールに戻して印刷すると、値は大きく異なります。次のコードは、ファイルを開いてスキャンする私の関数です。私はそれの中に値 "1 2 3 4 5 6 7 8 9 a b c d e f"を持っているtest.txtファイルを使っています。私がプログラムを実行すると、コンソールで何が印刷されるかは、各実行後に "0 ffffffff 0 0 0"が続く5つの16進値になります。Cの配列に16進値をスキャンする際に問題があります
void sim(int bytes, int lines, int sets, int policy){
int i = 0;
int total_Misses = 0;
int total_References = 0;
FILE *f1 = fopen("test.txt", "r");
if (f1 == NULL){
printf("File failed to open");
exit(0);
}
unsigned int a[10];
while (i < 10){
fscanf(f1, "%x", &a[i]);
printf("%x ", a[i]);
i++;
}
}
ファイルの外観は?実際にそこに10の値がありますか? 'fscanf'の結果を確認してください。 –
この 'test.txt'ファイルはどのように作成しましたか?プレーンテキストエディタを使用した場合は、ファイルの先頭に[BOM](https://en.wikipedia.org/wiki/Byte_order_mark)を追加していないことを確認してください。コマンドラインで 'xxd test.txt'と入力して、それがどのように見えるかを見てください。 –
'fscanf'が '間違った'値を出力すると仮定する前に、' 1'を正しく返すかどうかをテストするのに最適です。 – usr2564301