【发布时间】:2018-10-26 23:45:46
【问题描述】:
我想通过使文件名长度不超过 20 个字符来防止缓冲区溢出。我应该使用更好的功能吗?喜欢 fgets?
#include <stdio.h>
int main()
{
char filename[20]; //20 character long
printf("Please enter your filename:");
scanf("%s", filename);
return 0;
}
【问题讨论】:
-
fgets()允许限制输入的长度。试试fgets(filename, sizeof(filename), stdin)。这将防止缓冲区溢出。它还可以检测用户输入的字符何时超过缓冲区可以容纳的字符(而不是溢出缓冲区),以便您对其进行管理。阅读文档。 -
@Peter 我用fgets的时候不会读取文件,但是我用scanf没问题。
-
见Specifying the maximum string length to
scanf()dynamically in C (like%sinprintf())。对于所示的情况,您可以使用具有静态长度限制的scanf("%19s", filename);(而不是链接问题中讨论的动态) -
@myadeniboy 如果你使用
fgets,你需要将remove the newlinefgets放入缓冲区。 -
缓冲区太小并不能解决缓冲区溢出问题:)
标签: c buffer-overflow