请问Char 数组中有#0,如何转字符串?

rocket204 2017-11-02 04:16:08

array [0..N ] of Char , 如果中途遇到有#0 ,用string ,strpas 后面的值就取不到了。

请问有什么方法可以解决这个问题?谢谢!
...全文
456 6 点赞 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
rocket204 2017-11-08
自己写了个方法。


var
c:array [0..15] of Char; //中间遇到#0 的
cbak:array [0..15] of Char;
cbak2:array of Char;
s:string;
i: integer;
flag :boolean;
begin
c[0]:='H';
c[1]:='e';
c[2]:='l';
c[3]:='l';
c[4]:='o';
c[5]:= #0;
c[6]:='D';
c[7]:='e';
c[8]:='l';
c[9]:='p';
c[10]:='h';
c[11]:='i';
c[12]:= #0;
c[13]:= #0;
c[14]:= #0;
c[15]:= #0;

move(c,cbak,sizeof(c));
// 方法一
/*
for i:=0 to sizeof(cbak) -1 do
begin
if cbak[i] = #0 then
cbak[i] := ' ';
end;
s:=String(cbak);
ShowMessage(s); */

//方法二 从最后开始遍历
SetLength(cbak2, Length(c));
flag := false;
for i:= sizeof(c) -1 downto 0 do
begin
if (c[i] = #0) and (not flag ) then
begin
flag := false;
end else
begin
flag := true;
if c[i] = #0 then
cbak2[i] :=' '
else
cbak2[i] := c[i];
end;
end;

s:=String(cbak2);
ShowMessage(s);
  • 打赏
  • 举报
回复
为了和c的char*兼容,Delphi的string确实保持一个结尾#0(并不计入串长度),但是string中间可以包含任意数据,甚至可以把.exe装入到string里。比如: var s: string; begin s := 'abc'#0'def'; writeln(s); writeln(Length(s)); end; 输出串长度是7,并不会结束于字符c。
  • 打赏
  • 举报
回复
日月路明 2017-11-08
一般的在Delphi中,#0就是字符串的结束字符
  • 打赏
  • 举报
回复
rocket204 2017-11-03
我是想要中间有#0 的,后面又字符串的,能把后面的字符串显示出来!
  • 打赏
  • 举报
回复
SetLength(s, Length(a)); Move(a[Low(a)], s[Low(s)], SizeOf(a));
  • 打赏
  • 举报
回复
lyhoo163 2017-11-02
#0指ASCII码中的第一个字符,也就是空字符,,即通常的Null。 它是一个不能显示的字符。
  • 打赏
  • 举报
回复
相关推荐
发帖
语言基础/算法/系统设计
加入

1.6w+

社区成员

Delphi 语言基础/算法/系统设计
申请成为版主
帖子事件
创建了帖子
2017-11-02 04:16
社区公告
暂无公告