【发布时间】:2013-09-24 05:08:22
【问题描述】:
我正在尝试通过指定变量的宽度来保护下面的字段,以免发生缓冲区溢出。我宁愿不使用 fgets(),因为我正在尝试按照给定的规范编写一些东西(使用 scanf)。
代码如下:
char firstName[11], surName[21], job[16];
printf("Enter first name: ");
scanf("%10s", firstName);
printf("Enter surname: ");
scanf("%20s", surName);
printf("Enter job: ");
scanf("%15s", job);
所以对于这样的输入:
Enter first Name: UmbertoOverflow
/*surName gets skipped over*/
Enter job: janitor
我明白了:
First name: UmbertoOve
Surname: rflow
Job: janitor
它没有让我输入姓氏的机会,它只是用名字的其余部分填充。这对我来说似乎是缓冲区溢出,那么有没有办法使用 scanf 而不会得到这个结果?
【问题讨论】:
-
缓冲区溢出和堆栈溢出是两个不同的东西。
-
我的意思是基于堆栈的缓冲区溢出
-
这也无关紧要。即使变量是静态的,您的代码也会有问题。
标签: c security input buffer-overflow