我有一个易受缓冲区溢出影响的小程序。例如,数组限制为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;
}
答案 0 :(得分:2)
请参考: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)
。