我有一个小程序,很容易受到缓冲区溢出的影响。例如,数组限制为 8 个字符,但我仍然可以添加更多字符。我意识到 gets() 很容易受到攻击,所以我计划使用 fgets()。这个函数,我遇到段错误。
此外,欢迎提供其他建议。
谢谢
#include <string.h>
int main(int argc, char *argv[]){
int valid = 0;
char str1[8];
char str2[8];
printf ("Enter value for str1: ") ;
fgets(str1, sizeof(str1), stdin);
printf ("Enter value for str2: ") ;
fgets(str2, sizeof(str2), stdin);
if (strncmp (str1, str2, 8) == 0)
{ valid = 1;
}
printf("buffer: str1(%s), str2(%s), valid(%d)\n", str1, str2, valid);
return 0;
}
最佳答案
请引用:Why is the gets function so dangerous that it should not be used?据我所知,您表示您已经知道 gets
是在 C 中使用的易受攻击的关键字,但您仍然提供了使用 gets
的代码...
当尝试获取或存储字符串时,最好使用fgets
,因为格式遵循空间缓冲区以从用户读取字符串或字符:char *fgets(char *str,int n,FILE *stream)
。
关于c - 保护程序免受缓冲区溢出的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27006161/