我是首先定义了一个
MessageContent: array of Char; 然后在使用的时候
SetLength(MessageContent,length(eMsg.Text));但strpcopy( MessageContent, eMsg.Text );
却报错([Error] main.pas(284): Incompatible types: 'Array' and 'Char')这是什么原因,不能这样写吗,如果messagecontent是定长就可以了哪位大大知道,请告知,谢谢
MessageContent: array of Char; 然后在使用的时候
SetLength(MessageContent,length(eMsg.Text));但strpcopy( MessageContent, eMsg.Text );
却报错([Error] main.pas(284): Incompatible types: 'Array' and 'Char')这是什么原因,不能这样写吗,如果messagecontent是定长就可以了哪位大大知道,请告知,谢谢
,感觉string 好,不用定字节
而用StrCopy(@MessageContent, PChar(sMsg.Text));
就会报“project d:\xxxxx.exe faulted with messatge:access violation at 0xc3a2cfc5:read of address oxc3a2cfc5'.process stopped.use step or run to continue.”
决定用string试试
procedure TForm1.Button1Click(Sender: TObject);
var MessageContent: array of Char;
begin
SetLength(MessageContent,length(eMsg.Text));
Move(eMsg.text, MessageContent, length(eMsg.Text));
showmessage(PChar(MessageContent));
end;
SetLength(MessageContent,length(eMsg.Text));
for i := 1 to length(eMsg.Text) do
MessageContent[i] := eMsg.text[i];
var
s: array of Char;
begin
SetLength(s, 100);
StrCopy(PChar(s), PChar(LbPrompt.Caption));
ShowMessage(string(s));
end;这样 OK 我刚试过。
MessageContent: String;
begin
setLength(MessageContent,length(eMsg.Text));
strpcopy(Pchar(MessageContent),eMsg.Text );
emsg.Lines.Add(MessageContent);
end;
例如:
Var
S:String;
begin
S :='qaz';
//S[1] 就等于 字符'q'
//S[2] 就等于 字符'a' ....
end;
TSGIP_SUBMIT_tag = packed record
MessageCoding: Byte;
MessageType: Byte; //信息类型
MessageLength: longword; //信息长度
MessageContent: array of Char;
Reserve: array[0..7] of Char; //保留
end;这样一个包
然后
SetLength(Sgip_SUBMIT_tag.MessageContent,length(eMsg.Text)+1);(//看到有人说要加1就是加个#0)
FillChar( Sgip_SUBMIT_tag, SizeOf( Sgip_SUBMIT_tag ), 0 );
with Sgip_SUBMIT_tag do
begin
MessageCoding := 15; //byte;//信息格式
MessageType:=0;
MessageLength:=htonl(length(eMsg.Text));
strpcopy(Pchar(MessageContent),eMsg.Text )
end;然后再cSocket.SendBuf运行过程中就会报“project xxxxx.exe raised exception class eaccessviolation with message'access violation at address 00409161 in module 'xxxxx.exe'.write of address 00000000' process stopped.use step or run to continue.”