C言語関係掲示板

過去ログ

No.507.入力文字数の指定

[戻る] [ホームページ]
No.3895

入力文字数の指定
投稿者---キンチ(2002/12/16 11:20:55)


はじめまして

文字列を格納する配列の大きさを超えた文字列を入力されたときにエラー表示を行いたいのですが、どうすればよいでしょうか?

No.3898

Re:入力文字数の指定
投稿者---kikk(2002/12/16 17:43:08)


ども。


まず、最低限、入力時にバッファあふれを検出できなければなりません。
したがって、scanf()系の%sや、gets()は使えません。fgetc()等で1文字ずつ
チェックしながら読むか、fgets()で読んだ後にstrlen()で読めた長さを
チェックしてください(fgets()は改行文字も取り込むので注意)。また、
非標準になりますが、getline()が使えれば、それを使うのもよいかと
(この関数は何文字読めたかを返します)。

どの方法を使うにしても、そもそも読めたかどうかを(返り値をみて)
調べるのを忘れずに。それと、もしバッファあふれを検出し、さらに、
それ以降の処理で同じストリームからの入力があるならば、何らかの
方法(空読みするとか、fflush(input_fp)等の処理系依存な方法で)で
読まれなかった分をクリアする必要があります。


メッセージ出力は、fprintf()やfputs()等で、stderrやその他のお好きな
ところへお好みのものをどうぞ。。


では。

No.3912

Re:入力文字数の指定
投稿者---キンチ(2002/12/17 09:33:52)


回答ありがとうございます。

fgetsを使うことで解決しました。fgetsってファイルの入力の時のみ使うものだと思ってました。プログラムって奥が深いんですね。