关于array of char;(50分)

  • 主题发起人 主题发起人 whaoye
  • 开始时间 开始时间
W

whaoye

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠好,我碰到一个问题:

var
buffer:array[0..255] of char;
s:string;
p:pchar;
我可以用
buffer:='iloveyou'来给他赋值,
但是,怎么把一个string,或者是pchar的值赋给他呢?
急!并且希望是很简单的方法,
这样的方法不需要:
for i:=1 to length(s) do
buffer[i-1]:=s;
有没有更好的办法?
 
var
buffer: char;
s:string;
begin
buffer:=s
//i<=length(s)

 
我说的是array[0..255] of char;

你这只赋了一个位置的字符啊,

难道除了
for i:=1 to length(s) do
buffer[i-1]:=s;
就没有一次搞定的办法?
 
我写了一个过程:
procedure fillstring(var buffer:array of char;s:string);
var
i:integer;
begin
fillchar(buffer,sizeof(buffer),chr(0));
for i:=0 to length(s)-1 do
buffer:=s[i+1];
end;
然后有一个变量:
var
sendbuffer:array[0..255] of char;
我fillstring(sendbuffer,'iloveyou');
的确可行,但是我没有改变他的长度,如果
我再次fillstring(sendbuffer,'ok');的时候,
其实就变成了
sendbuffer[0]='o'
sendbuffer[1]='k';
sendbuffer[2]='o';
sendbuffer[3]='v';
.....
但这往往不是我需要的,我希望数据的长短也随着变化,
但是我用动态数组的时候,在setlength的时候总是出错,为什么呢?
有什么好的办法没有?
谢谢~!

 
你没随时指定动态数组的长度:
i:=length(s);
setlength(buffer,i);
 
str->buff:
function StrPCopy(Dest: PChar
const Source: string): PChar;

pchar->buff:
procedure Move(const Source
var Dest
Count: Integer);
 
procedure TForm1.Button1Click(Sender: TObject);
var
buffer:array[0..255] of char;
s,c:string;
p:pchar;
begin
s:='aaaaaaaa';
p:=StrPCopy(buffer,s);
c:=strpas(buffer);
showmessage(c);
end;
能满足你的需要吗?
 
你们没有明白我的意思,
我主要是用来在socket连接的时候,
rec(s,buffer,sizeof(recbuf),0)
然后这个recbuf我设置为array[0..255] of char;
比如这次我接到的是'i love this game!'
然后接着第二次rec(s,buffer,sizeof(recbuf),0)
我接到的是'yes';
但是,实际上recbuf的后面没有更改,
也就是说,如果显示出来,那么将是'yesove this game!'
但是这往往不是我需要的,
有什么好的办法没有?
总不能,每次接收的时候都换不同的数据吧,
然后接收的大小又不固定,用setlength也不好啊,
不知道我说明白了没有。
 
delphi的socket好像有一个属性叫什么recvbuffersize,就是接受到的缓冲去的大小:

array of char -> string 你可以用copymemory函数
 
我不是用控件的,我不喜欢那些东西,我是直接用soket api来做的。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
D
回复
0
查看
785
DelphiTeacher的专栏
D
后退
顶部