説明
scanf 系の %s やスキャンセット変換で幅を指定しないと、入力が出力先バッファーの容量を超えるおそれがあります。
想定される影響
- スタックのバッファーオーバーフロー、クラッシュ、コード実行につながる可能性があります。
対処方法
書式文字列に出力先バッファーより小さい幅を指定するか、fgets を使用してください。
例
変更前
c
char name[16];
scanf("%s", name);
変更後
c
char name[16];
scanf("%15s", name);
解説:
- 変更前:
%sに入力幅の上限がありません。 - 変更後: 16バイトのバッファーに対して最大15文字を指定し、終端のヌル文字を格納する領域を残しています。