[问题] 输入太多字元会造成程式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