var
ttstr:string;
ttnum:integer;
begin
ttstr:='⒈⒉⒊⒋⒌⒍踹姑娘的小蘑菇⒎XXXXX⒐YYYYY';            //⒎⒐都是特殊符号
ttnum:=Pos('⒐',ttstr);
showmessage( inttostr(ttnum) + '-' + copy(ttstr,ttnum+2,5)   );输出结果为“24-舰稾X”
为什么会得到这个结果?怎么才能让它得到正确的答案啊?

解决方案 »

  1.   

    我觉得是那个特殊符号的事。因为在测试'⒈⒉⒊⒋⒌⒍踹姑娘的小蘑菇'这个字符串的时候,字符串长是26,但Pos('⒐',ttstr)却能得到值为24,这说明你那个⒐和蘑有一部分值是相同的。我建议把特殊符号换掉。
      

  2.   


    var 
    ttstr:widestring;--用Widestring,统一为每个字符分配2个字节的存储单元
    ttnum:integer;
    begin
    ttstr:='⒈⒉⒊⒋⒌⒍踹姑娘的小蘑菇⒎XXXXX⒐YYYYY';            //⒎⒐都是特殊符号
    ttnum:=Pos('⒐',ttstr);
    showmessage( inttostr(ttnum) + '-' + copy(ttstr,ttnum+2,5)  );
    end;
      

  3.   

    用widestring, unicode字符串,双字节
      

  4.   

    使用wideString,我之前也遇到过相应的问题
      

  5.   

    copy(ttstr,ttnum+2,5)
    copy的第3个参数[5]会根据第1个参数[ttstr]的类型来决定复制的“字节”数吗?
    当ttstr:string时,copy复制了5个字节。当ttstr:widestring时,copy了10个字节?是这样的吗?(猜的)