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个字符。
我想问的是大家可以给我一个例子就是 :
调用此函数的例子,并对其的传递关系给予说明 。
多谢!!
begin
if length(s)=high(s) then dec(s[0]);
s[ord(length(s))+1]:=#0;
resualt:=@s[1];
end;
这个函数的功能就是将一个短的字符串一 NULL结束,让它可以传递给需要PCHAR 类型的函数,如果字符的长度超过254,则被截为254个字符。
我想问的是大家可以给我一个例子就是 :
调用此函数的例子,并对其的传递关系给予说明 。
多谢!!
首先说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语言的字符串。
小弟谢谢你了!!
begin
Result:=strAlloc(255*Sizeof(char));
StrPCopy(Result,Copy(aStr,1,254));
end;