编译时如何忽略gets()警告?

时间:2015-10-24 18:20:47

标签: c

我知道你很快就点击了这个期望回答NEVER USE GETS!,但我有正当理由。我正在学习缓冲区溢出,需要故意开发易受攻击的软件。

因此,正如标题所述,我如何忽略警告,以便编译成功?我试过了:

gcc bo.c -o bo -Wall

......无济于事。

感谢您的帮助。

2 个答案:

答案 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

这会留下第二个警告,来自链接器。据我所知,没有办法轻易抑制警告(见herehere)。但它不应该是一个问题,因为它是一个警告,而不是一个错误;可执行文件被创建。

答案 1 :(得分:0)

使用fgets代替gets

示例:

fgets (foo, sizeof(foo), stdin);