のドキュメントからfgets()
:
指定されたファイル ストリームから最大で count - 1 文字を読み取り、それらを str に格納します。生成される文字列は常に NULL で終了します。ファイルの終わりが発生した場合、または改行文字が見つかった場合、解析は停止します。この場合、str にはその改行文字が含まれます。
最大文字数の読み取りを要求します(これは、2 番目の引数として8
渡すことを意味します)。9
ユーザーが複数の7
文字を入力すると、キャッチされる可能性があります。ユーザーに失敗を通知し、 に残っているものはすべてスキップしstdin
ます。ユーザーが正しく入力7
してリターンをヒットfgets()
すると、改行文字で停止します。
の戻り値をチェックfgets()
して、コードが初期化されたバッファを処理しようとしていないことを確認してください。
例えば:
char password[9];
if (fgets(password, 9, stdin))
{
/* Strip new-line if present. */
char* nl = strchr(password, '\n');
if (nl) *nl = 0;
if (strlen(password) > 7)
{
/* Password too long.
Skip remaining input if necessary. */
int c;
while ((c = fgetc(stdin)) != EOF && c != '\n');
}
else if (0 == strcmp("letmein", password))
{
/* Good password. */
}
else
{
/* Incorrect password. */
}
}