私はこれがスタックオーバーフローに対して脆弱であると言った本の以下のコードを読みました。fgets()を使用しましたが、理解できませんでしたが、なぜ脆弱なのですか?
私の理解では、gets()の代わりにfgets()を使用すると、通常、最後にnullを配置することで、バッファオーバーフローを取り除くことができます。私は何かが足りないのですか?スタックオーバーフローを修正するには、fgets()の代わりに何を使用する必要がありますか?
void getinp(char *inp, int siz)
{
puts("Input value: ");
fgets(inp, siz, stdin);
printf("buffer3 getinp read %s\n", inp);
}
void display(char * val)
{
char tmp[16];
sprintf(tmp, "read val: %s\n", val);
puts(tmp);
}
int main(int argc, char *argv[])
{
char buf[16];
getinp(buf, sizeof(buf));
display(buf);
printf("buffer3 done\n");
}