(79)安全な入力とdefineマクロ2016年7月20日ファイル処理の最後の説明で、バッファ・オーバーフローと、安全な入力について説明。一般的なC言語での文字列入力のプログラムは、以下の様なものがテキストにも書かれている。;}バッファオーバーフローしかし、こういった処理は極めて危険である。文字列をはみ出るような入力があった場合、処理番地を書き換えられる可能性がある。書くことで、想定外の処理を動かすかもしれない。このテクニックをバッファオーバーフローと呼ぶ。このため、最大文字制限の機能を使い、以下のように記述すべきである。単体で複雑な入力に対応することは極めて難しい。sscanf()このような場合によく使われるのが、fgets()とsscanf()である。文字配列に1行分のデータ(行末文字"¥n"まで)を、文字配列に読み込む関数である。同じようにデータを読み込む。読み元のファイルを指定する。読み込むことはしないので、バッファオーバフローの心配はない。sizeof()は、引数部分の変数のバイト数を返す演算子。入力が最大バイト数以下の場合、行末文字まで読み込む。}}fscanf()にfprintfがあるように、sscanfに対してsprintfもある。#defineマクロscanfで"%d"で数字を入力する際に、文字を入力されると、あとの処理が書きにくい場合が多い。sscanf()を使うなどの対処をとることが多い。通常プログラム中の定数を分かりやすく使う場合に、使われる。プログラムの内容を書き換える機能。部分は、以下のように書き換えられる。(*pc)<='9')ただし、#defineマクロは、プログラムのコンパイル前に、文字列として書き換えを行う。書き換えられるので、17になる。