在带中文的长字符串中,有多个结束符号#0,这时显示或赋值都会导致字符串被截断,请问,怎么去掉这些结束符号?
用正则函数TRegExp的replace可以去掉它,但却把中文的一些符号弄成乱码了。

解决方案 »

  1.   

    for i:=1 to length(s) do
      if ord(s[i])=0 then
        s[i]:='.';
      

  2.   

    String类型变量相互赋值是不会把字符串中的#0字符截断的,截断现象只会出现在String和PChar之间转换的时候。
    LZ最好先弄清楚这些#0字符是如何产生的(一般调用Windows API才有可能会产生#0字符)。如果这些#0字符是程序中需要保留的,就不应该去掉它们。
      

  3.   


    C字符串是#0结尾的,因为C字符串是不记录字符串内容的长度的,所以必须定义一个结尾符来表示字符串的结尾。
    PASCAL字符串不是, PASCAL字符串除了保存字符串内容之外,还保存了字符串内容的长度值,所以不需要结尾符。
      

  4.   

    出现多个#0是因为我要处理的字符串是用IDHTTP访问网页返回来的。因为急需处理,昨晚发问后,自己又继续试验,终于自己搞定了。如下:
    function StrZEROReplace(S: string): string;
    var   
          my1:TstringStream;
          SSize:Longint;
          newstr,tmp:string;
      begin
          my1:=TstringStream.Create(s);
          SSize:=my1.Size;
          my1.Position :=0;
          tmp:='';
          while my1.Position < SSize do
              begin
                tmp:=my1.ReadString(1);
                  if tmp=chr(0) then
                      begin
                        continue;
                      end;
                newstr:=newstr+tmp;
              end;
          my1.Free;
          result:=newstr;end;