1

ユーザーから文字列を取得するために使用しようとしてgets()いますが、プログラムはすぐに渡されているようgets()です。ユーザーが入力を行うための一時停止はありません。なぜgets()何もしていないのですか?

char name[13];
printf("Profile name: ");
gets(name);
printf("\n%s", name);
4

6 に答える 6

6

gets() または fgets() を呼び出す前に getchar() を呼び出します。gets() または fgets() は、stdin の前の入力から既に存在する '\n' のためにスキップされるため、getchar() を呼び出すと、gets() または fgets() または他の同様の関数ではなく、それ自体がスキップされることになります。 . しかし、それは標準的な解決策ではなくハックであることを覚えておいてください (私はそう思います)。また、gets() の使用は禁止されています。

        printf("\nEnter a String: ");
        getchar();
        //fgets(inputString, 100, stdin);
        gets(inputString);
        printf("\n%s", inputString);
于 2017-03-25T13:51:59.077 に答える
3

これgets()は使用するのが非常に危険なため、一部の C ライブラリはそれを完全に削除し、何もしないバージョンに置き換えました。

代わりにfgets()を使用してください。

于 2013-10-30T18:32:05.223 に答える
1

リファレンスを見てみようgets()

stdin から文字列を取得する

標準入力 (stdin) から文字を読み取り、改行文字またはファイルの終わりに到達するまで、それらを C 文字列として str に格納します。

改行文字が見つかった場合、str にはコピーされません。

str にコピーされた文字の後に、終端のヌル文字が自動的に追加されます。

gets は fgets とはまったく異なることに注意してください: gets は stdin をソースとして使用するだけでなく、結果の文字列に末尾の改行文字を含めず、str の最大サイズを指定することを許可しません (これにより、バッファー オーバーフローが発生する可能性があります)。

したがって、基本的にgets()は安全ではない(バッファオーバーフローにつながる可能性がある)だけでなく、入力バッファにあるものも読み取ります。

を使用することをお勧めしますfgets()が、迅速な (そして怠惰で愚かな) 解決策が必要な場合は、入力バッファーをフラッシュするだけです。

char name[13];
printf("Profile name: ");
fflush(stdin);
gets(name);
printf("\n%s", name);
于 2013-10-30T18:33:47.990 に答える