おまいらは「scanf=セキュリティホール」で思考停止していないか

ちょうど全く同じことを後輩に話したばかりでワロタ。

そのとき、sscanf のほうが嬉しい時があると言う話をちらっとしたんだけど、こういう場合:

  if (sscanf(buf, "%d", &i) < 1) {
    printf("ご主人様……入れるものが……違いますぅ: %s\n", buf);
  }

エラーメッセージとして、間違った入力そのものを表示したいときは、一旦別のバッファに読み込んでから解析した方がいいということ。

他にもいったん入力を文字列として読み込んでおくと嬉しい場合があるけど、それを挙げるのは読者の宿題ということで。(dankogaiメソッド?)