引擎版本:cocos2d-x 3.0
UITextField若设置了长度限制以后使用setText设置中文字符可能导致程序崩溃。
重现方式:
UITextField控件设置长度限制5,通过setText设置中文字符 “一二三” 两次,则第二次就会出错。
经查看代码TextField::setText(const std::string& text)里面的
int text_count = _calcCharCount(text.c_str());
int total = text_count + _calcCharCount(getStringValue().c_str());
这两句对于长度的计算有误,text为设置的字符串,那长度total应该就是text_count才对,为什么还要加上原有字符的长度,这里是字符串替换又不是连接。
然后下面读取字符又是从text里读取,就导致下标越界了。