Cで文字列入力用の関数を作成する

C言語で標準入力に入力された文字列を読み込むとき、scanf で読み込むとバッファオーバーランになる危険性がある。フォーマット指定をしっかりやればバッファオーバーランは防げるらしい*1 が、正直なところ面倒くさい。

fgets で何とかしつつ、かつ標準入力にゴミを残さないようにするのがいいと思う。

fgets は改行を含めて読み込むので、読み込まれた文字列の中に改行文字が見つかれば、最後まで読み込めていることになる。

改行文字が見つからなかった場合は、読み取られなかった分が標準入力に残っているので、空読みしてエラーを返すようにする。

以下、サンプルコードと動作例を示す。

サンプルコード

Cで標準入力から文字列を読み取る関数とその使用例のサンプルコード

動作例

f:id:hk03ne:20160813000345j:plain

他にもやり方はあるかもしれないが、当面はこれで問題はない。

参考