看似简单的问题:array of char(动态array) 转换为string的方法(7分)

  • 主题发起人 主题发起人 tianzhen
  • 开始时间 开始时间
因为有一个终止符。
大哥,你有没有试一下我的函数啊
 
还是不对啊 末尾多了一个空格
VictorWoo的函数
function chartostring(Buf:pchar;length:integer)
length取的什么值
 
我把唯一正确的方法写成函数怎么又不对了呢?
tmp.Add(Copy(PChar(mychar), 1, Length(mychar)));
………………》》》》
function chartostr(Buf:array of char):string;
begin
result:=Copy(PChar(Buf),1,Length(Buf)); //出错 Invalid typecast
end;
 
1.你用high(mychar)作为length看看。
 
我把你的函数改为一个参数(方便用),结果还是不对:

function chartostring(Buf:pchar):string;
var
s:string;
len:integer;
begin
len:= length(StrPas(Buf));
setlength(s,len);
move(Buf[0],s[1],len); //不能用strcopy
result:=s;
end;

mychar[0]:='t';
chartostring(pchar(mychar) //结果是t>
 
我要风了 delphi有这么弱吗?
 
大哥我真的要屈服你了呵呵
只好开delphi写一遍。调试正确:

function chartostring(Buf:pchar;length:integer):string;//char转变成string
var
s:string;
begin
setlength(s,length);
move(Buf[0],s[1],length); //不能用strcopy
result:=s;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
mychar:array of char;
begin
setlength(mychar,1);
mychar[0]:='t';
ShowMessage(chartostring(@mychar[0], Length(mychar)));
end;
 
能不能写成传递一个参数的函数啊, 这样用起来也太麻烦了,
受累,我怎么也写不对
 
顶 大侠们回来看看啊 问题还没解决啊
 
没发现多出空格
要不加上

mychar[1]:=char(0)
 
chartostring(PChar(mychar), Length(mychar))
这样会麻烦么?
一个参数不可能的。动态数组不能做参数。
另外,您恐怕得加些分了,为了这7分我替你折腾了多久
 
写到文件里面看末尾是多了个空格 tmp.SaveToFile('1.txt');

加上 mychar[1]:=char(0) 结果更莫名其妙了
 
唉 我就这7分了, csdn的分数行吗
 
兄弟们,实在没有好的解决方法,我干脆用静态数组了,但是还是有问题:

procedure TForm1.FormCreate(Sender: TObject);
var
urchar:array[1..10] of char;
tmp:tstringlist;

begin
tmp:=tstringlist.create;
urchar[1]:='t';
urchar[2]:=#0;
tmp.Add(string(urchar));
tmp.SaveToFile('1.txt'); //内容为t 蔃
end;

怎么让1.txt中只有1个t呢
 
我觉得,你不愿用我的那个函数,是因为有两个参数,两个参数就太“麻烦”了么?
还是现实一点吧。
 
那还不如用tmp.Add(Copy(PChar(@mychar[0]), 1, Length(mychar))); 简单啊
多谢啊,我在找些分。。
 
兄弟们,实在没有好的解决方法,我干脆用静态数组了,但是还是有问题:

procedure TForm1.FormCreate(Sender: TObject);
var
urchar:array[1..10] of char;
tmp:tstringlist;

begin
tmp:=tstringlist.create;
urchar[1]:='t';
urchar[2]:=#0;
tmp.Add(string(urchar));
tmp.SaveToFile('1.txt'); //内容为t 蔃
end;

怎么让1.txt中只有1个t呢
 
var
mychar:array of char;
tmp:tstringlist;

begin
setlength(mychar,2); //把1改成2
mychar[0]:='t';
tmp:=tstringlist.create;
tmp.Add(pchar(mychar)); //改成这样 ,1.txt中只有1个t
tmp.SaveToFile('1.txt');

end;
 
多谢大侠。我都不报希望了。居然解决了。可惜我没分了。osly你是俺的偶像。
 
后退
顶部