一部の書式付き入力形式は、バッファー・オーバーフローを引き起こす可能性があるため、使用してはなりません。
書式付き文字列では、バッファー・オーバーフローが発生しないようにしなければなりません。特に "%s" 入力形式は、本質的に安全ではありません。代わりに、"%ddds" や "%*s" を使用してください。ここで、ddd はデスティネーション・バッファーのサイズを示します (例: "%24s")。コンパイル時にバッファーサイズが一定でない場合は、"%*s" を使用できます。"*" は次の入力引数から最大サイズを取得します。例: scanf("%*s", sizeof(buffer), buffer);
ID |
問題箇所 |
説明 |
---|---|---|
1 |
書式の不一致 |
安全でない書式付き入力文 |
#include <stdio.h> char buffer[1024]; int main(int argc, char **argv) { scanf("%s", buffer); // unsafe: could overflow buffer // better is scanf("%*s", sizeof(buffer), buffer); printf("read %s\n", buffer); return 0; }
© 2010 Intel Corporation. 無断での引用、転載を禁じます。