function  chorttosting(var s:shortstring):pchar;
       begin
           if length(s)=high(s) then  dec(s[0]);
               s[ord(length(s))+1]:=#0;
                resualt:=@s[1];
       
       end;
           这个函数的功能就是将一个短的字符串一 NULL结束,让它可以传递给需要PCHAR  类型的函数,如果字符的长度超过254,则被截为254个字符。
            我想问的是大家可以给我一个例子就是 :
             调用此函数的例子,并对其的传递关系给予说明 。
              多谢!!

解决方案 »

  1.   

    简单!
    首先说shortstring类型
    内存中其长度固定为255字节,所以high(s)=255,固定值。
    s[0]存放字符串的长度值
    比如shortstring s="hello',则S[0]=5,S[1]='h',S[2]='e',...,S[5]='o'.
    而s=字符串255个'A'时,S[0]=255,S[1]到S[255]都等于'A'。
    现在就用这个s做参数。if length(s)=high(s) then  dec(s[0]);
    //255个'A',所以length(s)=255
    //high(s)为固定值255
    //所以S[0]=S[0]-1=254
    s[ord(length(s))+1]:=#0;
    //ord(),把任何有序类型转化成整型,所以这里好想是多此一举
    //这里把第255个字符变成空
    resualt:=@s[1];
    //因为S[0]保存的是长度,S[1]才是字符串真正的开始,所以返回S[1]的地址。
    //经过处理,pchar指向254个A,而255位置是#0的这样一个字符串,这种字符串是C语言格式
    //所以,这个函数把一个pascal的字符串变成了C语言的字符串。
      

  2.   

    to wdong18(东东)  
      小弟谢谢你了!!
      

  3.   

    function StringToPChar(aStr:string):PChar;
    begin
      Result:=strAlloc(255*Sizeof(char));
      StrPCopy(Result,Copy(aStr,1,254));
    end;