我在一本书中读到下面的代码,它说这很容易受到堆栈溢出的影响。虽然使用了 fgets() ,但我无法理解,为什么它容易受到攻击?
我的理解是,使用 fgets() 而不是 gets() 通常可以通过在末尾放置一个 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");
}