相关疑难解决方法(0)

为什么获取功能如此危险以至于不应该使用它?

当我尝试编译使用gets()GCC函数的C代码时,

我明白了

警告:

(.text + 0x34):警告:`gets'函数很危险,不应该使用.

我记得这与堆栈保护和安全性有关,但我不确定为什么?

有人可以帮我删除这个警告并解释为什么会有这样的使用警告gets()

如果gets()是如此危险,为什么我们不能删除它?

c gets fgets buffer-overflow

210
推荐指数
9
解决办法
14万
查看次数

站点编码字节上的“ gets(stdin)”怎么回事?

Coderbyte是一个在线编码挑战网站(我在2分钟前找到了它)。

遇到的第一个C ++挑战有一个您需要修改的C ++框架:

#include <iostream>
#include <string>
using namespace std;

int FirstFactorial(int num) {

  // Code goes here
  return num;

}

int main() {

  // Keep this function call here
  cout << FirstFactorial(gets(stdin));
  return 0;

}
Run Code Online (Sandbox Code Playgroud)

如果你稍微熟悉C ++的第一件事*在你的眼睛持久性有机污染物是:

int FirstFactorial(int num);
cout << FirstFactorial(gets(stdin));
Run Code Online (Sandbox Code Playgroud)

因此,好的,代码调用gets从C ++ 11开始不推荐使用,而从C ++ 14开始删除,这本身就是不好的。

但后来我意识到:gets是类型char*(char*)。因此,它不应该接受FILE*参数,并且结果不能代替int参数使用,但是...不仅可以编译时没有任何警告或错误,而且可以运行并将实际的正确输入值传递给FirstFactorial

在此特定站点之外,代码无法编译(如预期的那样),那么这里发生了什么?


*实际上第一个是,using namespace std但这与我在这里的问题无关。

c++ gets input standards-compliance

144
推荐指数
3
解决办法
7159
查看次数

标签 统计

gets ×2

buffer-overflow ×1

c ×1

c++ ×1

fgets ×1

input ×1

standards-compliance ×1