今天,我发现下面的编译和打印42:从流中读取char * - 另一个缓冲区溢出失败?
#include <iostream>
#include <sstream>
int main()
{
std::stringstream s;
s << 42;
char c[8];
s >> c;
std::cout << c;
}
但是,这是一个潜在的缓冲区溢出攻击,对不对?如果我们从用户提供的数据流中读取数据,我们无法轻易知道数据的大小,因此无法分配足够的存储空间。 std::gets
被删除,也许这应该也是?
也许与https://stackoverflow.com/questions/3203452/how-to-read-entire-stream-into-a-stdstring相关? – lz96
这显示了正确的方法来做到这一点,我的问题是更多关于为什么c + +可以轻松地拍摄自己的脚。 – Lyberta
@ M.M'fgets'有一个size参数,这个不是。 – Lyberta