-2

「%s」の代わりに「%1024s」を使用すると、コードにセキュリティ ホールが作成されるのを防ぐことができると読みました。「%1024s」と「%s」の違いは?

4

1 に答える 1

3

ではscanf()、おそらくそうでしょう?

したがって、そのマニュアルページ読むことができます。

基本的に、%1024sスキャンする文字列の長さを 1024 文字に最大化するため、常に 1025 バイトの長さのバッファーに収まります (0 ターミネーターの場合は 1024 + 1)。%sにはこの制限がないため、バッファが文字列よりも小さい場合、scanf()バッファ オーバーランが発生し、プログラムは未定義の動作を呼び出します。

于 2013-05-01T19:50:23.303 に答える