请教一个array[1..20] of Char转换成String的问题?(50分)

  • 主题发起人 主题发起人 am2001
  • 开始时间 开始时间
A

am2001

Unregistered / Unconfirmed
GUEST, unregistred user!
for i := 0 to 19 do
s := s+ Buf;
用这样的方法能转成string,但我碰到当Buf数据只有前几位有数据时,即buf[0] := '4',
buf[1] := '5',后面的都没有赋值时转换成string时后面总有一些乱码,我想转换成
string后buf数组只有前几位的话string也只有几位,应怎么做?
 
直接用
s:=buf;
 
你那些没些赋值的数组元素会指向不确定的内存区域,因此会出现未知的乱码。可能只好在
你给他赋完值后,直接将已赋值的元素的数目保存到一个integer变量中,再在上述的for
循环中使用。
我刚才又试了一下,发现s是Pchar类型是,可以直接用ysai的方法,不需要象我上面说的
那么麻烦了。
 
你如果要Buf 的前几位,你应该在for循环的循环结束值指定:
LoopTerm := <buf的前几个数据位>
for i := 0 to LoopTerm do
s := s+ Buf;
 
uses sysutils
var
s:string;
buf:array[0..19] of Char; //这里一定是零基字符数组它相当于pchar类型

s:=StrPas(buf)
 
我是调用别人写的函数的,有几位是不确定的,现在我是这样做的,循环时到#0就结束了
 
可以先把数组初始化为一个特殊值,再用条件语句判断数组没有数据
的位数,进行长度控制。
另外,就是使用object pascal的新特性——动态数组
基本格式 a:array of char;
自己试试看。
 
strpas函数就可以了。哪用那么麻烦。参数是地址或数组。
 
s:=strpas(buf)就可以
不过要注意,是到buf里的第一个null为止,
如果buf中出现一个null,后面的部分都会被忽略
 
多人接受答案了。
 
后退
顶部