我知道你很快就点击了这个期望回答NEVER USE GETS!
,但我有正当理由。我正在学习缓冲区溢出,需要故意开发易受攻击的软件。
因此,正如标题所述,我如何忽略警告,以便编译成功?我试过了:
gcc bo.c -o bo -Wall
......无济于事。
感谢您的帮助。
答案 0 :(得分:3)
此代码:
#include <stdio.h>
int main() {
char foo[10];
gets( foo );
return 0;
}
在编译时产生以下输出:
bo.c: In function 'main':
bo.c:4:2: warning: 'gets' is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets( foo );
^
/tmp/cclk8TkP.o: In function `main':
bo.c:(.text+0x10): warning: the `gets' function is dangerous and should not be used.
第一个警告来自编译器,我们可以看到用来抑制它的标志:-Wno-deprecated-declarations
。
这会留下第二个警告,来自链接器。据我所知,没有办法轻易抑制警告(见here和here)。但它不应该是一个问题,因为它是一个警告,而不是一个错误;可执行文件被创建。
答案 1 :(得分:0)
使用fgets
代替gets
示例:强>
fgets (foo, sizeof(foo), stdin);