840
回編集
(→C言語の場合: 微妙に修正(gets はバッファオーバーランを防げないが scanfは回避する方法が皆無ではないので)) |
Vivo~jawiki (会話 | 投稿記録) m (→C言語の場合) |
||
===C言語の場合===
[[C言語]]の標準入出力関数である[[gets]]関数はバッファ長のチェックを行わないで標準入力をバッファに書き込むので、この関数を使う全てのプログラムには、バッファオーバーランによる不正動作の危険性がある。また使い方が分かりやすいという理由でC言語初心者向けの入門プログラミングでしばしば用いられる[[scanf]]関数も
次のプログラムはgets関数を用いた例である(
#include <stdio.h>
}
例えばgets関数の代わりにfgets関数を用いることで、この問題を回避できる。次のプログラムは上記のプログラムと等価である。fgets関数にはバッファのサイズを渡すことができ、このバイト数を超えてバッファに書き込みを行わない。従ってバッファサイズが正し
#include <stdio.h>
|
回編集