C プログラムで読み取る固定形式のテキスト ファイルがあります。テキストファイルのフォーマットは以下のとおりです。
w 400341a0
r dfcfa8
w 7b034dd4
最初の文字は常に w または r で、2 番目の要素は 32 ビットの 16 進数です。
このファイルを1行ずつ読み取るために、次のようにコードを記述しました。
int main (int argc, char *argv[])
{
FILE* file_ptr;
char rw;
uint32_t address;
int file_read;
uint32_t file_line_ctr = 1;
#if(MODE == DEBUG)
{
printf("DEBUG_MODE\n ");
}
#else
{
/*Do Nothing*/
}
#endif
file_ptr = fopen(argv[10], "r");
if (file_ptr == NULL)
{
printf("Can't Open File\n");
}
else
{
printf("File Opened Successfully\n");
}
file_read = fscanf(file_ptr, "%c %x" , &rw, &address);
printf("%c %x \n", rw, address);
while (file_read!= EOF)
{
file_read = fscanf(file_ptr, "%c %x" , &rw, &address);
file_line_ctr ++;
printf("%c %x \n", rw, address);
}
fclose(file_ptr);
printf("File Length = %d \n", file_line_ctr);
return 1;
}
100000 エントリのファイルについて、以下の形式で出力を取得します。
w 400341a0
400341a0
r dfcfa8
dfcfa8
w 7b034dd4
7b034dd4
File Length = 200000
明らかに、何らかの理由でエントリを 2 回読み、2 回印刷しています。誰かがなぜそうなのか理解できますか?