2

C で関数 fgets() を使用して 8 文字を読み取ろうとしていますが、stdin から 8 文字である必要があります。

これまでのところ、私はこれを持っています

    char HEX[9];
    while (fgets(HEX, 8, stdin) != NULL)
    {
      if (HEX[8] == '\0')
      {
        printf("GOOD\n");
        break;
      }
      else
      {
        printf("Not 8 characters");
      }
    }

しかし、それは機能していません。何か案は?if (strlen(HEX) > 8) も使用してみましたが、どちらも使用しませんでした。

前もって感謝します。

4

5 に答える 5

0

これが理由です:

fgets() は、stream から最大で size 未満の 1 文字を読み取り、s が指すバッファーに格納します。EOF または改行の後、読み取りは停止します。改行が読み取られると、バッファに格納されます。終端のヌル バイト (aq\0aq) は、バッファー内の最後の文字の後に格納されます。

つまり、8 を読み取りたい場合、実際には 7 のみを読み取ることになります。9 を読み取り、サイズ 9 のバッファーを持ち、最後から始まる値のいずれかが null かどうかを確認する必要があります。

 char HEX[10];
 memset(hex, 1, 10); //Will stop false positives since memory might be null to begin with
while (fgets(HEX, 9, stdin) != NULL)
{
  if (HEX[9] == '\0')
  {
    printf("GOOD\n");
    break;
  }
  else
  {
    printf("Not 8 characters");
  }
}
于 2013-07-30T20:43:34.207 に答える