<p> <span id="post1" style="color: #555555; font-size: 12px">delphi漏洞 pos()函数的奇怪现象<br /> <br /> edit1.Text := intToStr(pos('市',资中市'));<br /> 结果=5,正确.<br /> <br /> edit1.Text := intToStr(pos('市','资兴市'));<br /> 结果=2 . -_-?<br /> <br /> edit1.Text := intToStr(pos('市','湖南省郴州市资兴市'));<br /> 结果=11,正确.<br /> <br /> edit1.Text := intToStr(pos('市','湖南省资兴市郴州市'));<br /> 结果=8 . -_-?<br /> <br /> 以上结果都进行调试过,有没高手知道为什么会这样的?</span></p> <p> <span style="color: #555555; font-size: 12px">---------------------------------------------<br /> <br /> 因为“资”的后半部分加上“兴”的前半部分就是“市”。<br /> s1:='资';<br /> s2:='兴';<br /> ShowMessage(s1[2]+s2[1]);<br /> <br /> <strong>不是漏洞,是由于汉字由两个字节组成的,使用WideString就Ok了<br /> 试试看:<br /> edit1.Text := intToStr(pos('市',WideString('资中市')));<br /> //结果=3,正确.<br /> <br /> edit1.Text := intToStr(pos('市',WideString('资兴市')));<br /> //结果=3<br /> </strong></span></p> Loading... <p> <span id="post1" style="color: #555555; font-size: 12px">delphi漏洞 pos()函数的奇怪现象<br /> <br /> edit1.Text := intToStr(pos('市',资中市'));<br /> 结果=5,正确.<br /> <br /> edit1.Text := intToStr(pos('市','资兴市'));<br /> 结果=2 . -_-?<br /> <br /> edit1.Text := intToStr(pos('市','湖南省郴州市资兴市'));<br /> 结果=11,正确.<br /> <br /> edit1.Text := intToStr(pos('市','湖南省资兴市郴州市'));<br /> 结果=8 . -_-?<br /> <br /> 以上结果都进行调试过,有没高手知道为什么会这样的?</span></p> <p> <span style="color: #555555; font-size: 12px">---------------------------------------------<br /> <br /> 因为“资”的后半部分加上“兴”的前半部分就是“市”。<br /> s1:='资';<br /> s2:='兴';<br /> ShowMessage(s1[2]+s2[1]);<br /> <br /> <strong>不是漏洞,是由于汉字由两个字节组成的,使用WideString就Ok了<br /> 试试看:<br /> edit1.Text := intToStr(pos('市',WideString('资中市')));<br /> //结果=3,正确.<br /> <br /> edit1.Text := intToStr(pos('市',WideString('资兴市')));<br /> //结果=3<br /> </strong></span></p> 最后修改:2010 年 03 月 01 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 支持就是力量
3 条评论
理论上资兴市的市也应该算上是第5个位置,每个汉字2字节嘛
最好指明存在问题的Delphi版本,否则初学者很容易理解不好。呵呵,希望Delphi 2009/2010没有这个问题。
我用的Delphi7,用WideString就没有这个问题了。