2012-04-05 11 views
2

非常に簡単な例 - 簡単な解決策を期待: - 私はそれを強制する可能性のある簡単な方法があり、私は私のバイト限界より入力よりとき、それは「n」を印刷するように見えることはできませんC fgets - オーバーフローを捕らえる簡単な方法?

char x[7]; 
if(fgets(x,5,stdin)) 
    printf("y"); 
else 
    printf("n"); 

またはそれを超えたときにキャッチする?

入力の例は、上記のスニペットで実際に「n」を引き起こしますか?私は本当に..

乾杯、 B

+0

fgetsには引数としてバッファサイズ(7)が必要であり、改行文字とヌル文字のスペースがあるサイズではなく、subtracted(5)であることに注意してください。 –

+0

ええ、目的に合っていないということを強調するためにこれをしました –

+0

この質問はさまざまな形でここに何百回も尋ねられ、答えはマニュアルページに/ – AoeAoe

答えて

0

fgetsは、何も読み込めなかった場合にのみNULLを返します。通常はファイルの終わりを意味します。

fgetsはバッファに収まる1行またはその行の文字を読み込むので、変数xに改行文字が含まれているかどうかを確認する必要があります。

0
  1. select()等を介して標準入力に待機しているデータがまだあるかどうかをチェックする必要があると思い、今のポイントを見ていませんよ。

  2. /dev/nullまたは0バイトのファイルをstdinにリダイレクトすることができます。

+0

バー私は選択を使用する方法を見つけることができません...それはFDのいくつかの並べ替えを監視するようです..?しかし、それは正しい答えのようです。入力全体をループして、 '\ 0'をチェックするのは、これらの他の穏やかな男性が推奨するような最も簡単な方法ですか、stdin.lengthのような素晴らしいものがありますか? –

1

fgetsそれが失敗したときに出力として「n」を取得するには、0を返します、あなたが入力しなくても、コントロール-Dまたはコントロール-Zを(またはあなたのOSは、入力の終わりを示すために使用するものは何でも)使用したいです他の何かを最初に。

あなたが読む余地を残しているより多く入力されたときを検出するには、最後に読んだ文字が改行であるかどうかを確認します。そうであれば、全体の行を読む。そうでなければ、もっと待っています。

+0

ああ、そういうことです - ありがとう –

関連する問題