[問題] 輸入太多字元會造成程式hang掉。

作者: jay70120 (小鳥頭)   2016-03-21 17:30:19
目前剛在學習c++中
在寫一個猜數字的小遊戲,就是幾A幾B那一種的
可是我遇到了一個問題
就是當USER 輸入很長的一串字元的時候 就會造成程式HANG住
很想知道這是什麼原因。
如果有人知道請教導一下 >"< 感謝!!!
作者: ronin728 (浪人)   2016-03-21 17:55:00
是不是用 char[] 當輸入資料? 用 std::string 會比較好
作者: jay70120 (小鳥頭)   2016-03-21 18:17:00
是的我是用char因為要比對的原因… 用char比較方便…
作者: ronin728 (浪人)   2016-03-21 18:39:00
這種情況發生在產品中可能會是個黑帽攻擊的安全漏洞可以利用scanf的長度限制功能 %50s 就是指從輸入區存入50個字元,當然長度可以自己訂另一種是用 std::string 的 str.c_str()回傳的是 std::string 裡面的 char*
作者: LPH66 (-6.2598534e+18f)   2016-03-21 18:43:00
樓上講的攻擊的小範例 https://youtu.be/1S0aBV-Waeo
作者: ronin728 (浪人)   2016-03-21 18:44:00
不過比對字串 char* 或 char[] 沒有比較方便...兩個char*比較用strcmp(),可是用 std::string 只要 ==
作者: WBTs (加權平衡樹)   2016-03-21 18:47:00
作者: ronin728 (浪人)   2016-03-21 18:47:00
str1 == str2 就好啦,很方便不是?其實WBTs大分享的方法有個小問題需要注意,C++11沒有VLA雖然GCC很好心的讓你在C++裏用VLA,但是MSVC++會拒絕str_a.c_str() 就能得到 char*,不用這麼麻煩
作者: WBTs (加權平衡樹)   2016-03-21 19:12:00
用動態陣列
作者: tuyutd0505 (Huang Jason)   2016-03-21 19:59:00
如果要抓出 string 中字元 除了[i]外也可以用相對安全的 str.at(i)

Links booklink

Contact Us: admin [ a t ] ucptt.com