今天,我發現下面的編譯和打印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