【发布时间】:2018-01-18 03:51:36
【问题描述】:
今天我发现下面编译并打印 42:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream s;
s << 42;
char c[8];
s >> c;
std::cout << c;
}
但这是一个潜在的缓冲区溢出攻击,对吧?如果我们从用户提供的流中读取数据,我们无法轻易知道数据的大小,因此无法分配足够的存储空间。 std::gets 已被删除,也许这也应该被删除?
【问题讨论】:
-
这显示了正确的方法,我的问题更多是关于为什么 c++ 允许如此轻松地射击自己。
-
@M.M
fgets有一个尺寸参数,这个没有。 -
@M.M 哦,我不知道,我想你可以回答一下。
标签: c++ io iostream buffer-overflow