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

rocket204 2017-11-02 04:16:08

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

请问有什么方法可以解决这个问题?谢谢!
...全文
570 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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。 它是一个不能显示的字符。

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧