[征集] 关于字符数组赋值方法. 另:传说中的MIC请来,该如何处理
[征集] 关于字符数组赋值方法. 另:传说中的MIC请来
本来此贴已删(因为半天没人回贴),但听说传说中的MIC要看一下,所以我又重发出来。
我的目的是想整理一篇《字符数组赋值方法大全》。目前已写了六种。朋友们请提出错误,补充其他方法。也可以讲一些与此相关的有教育意义的知识。我会根据回贴质量,给贴子加分。谢谢大家了。请顺延序号。
《字符数组赋值方法大全》
整理者:LSoft
(1)把数组作为 PChar 处理,且需留最后一个元素放置 NULL
const
S : string = '123 ';
var
A : array[0..3] of char;
begin
SysUtils.StrPCopy(A,S);
end;
(2)把数组作为 PChar 处理,且需留最后一个元素放置 NULL
const
S : string = '123 ';
var
A : array[0..3] of char;
begin
SysUtils.StrCopy(A,PChar(S));
end;
(3)用 Move() 函数。
const
P : PChar = '123456 ';
var
A : array[0..3] of char;
begin
system.Move(P^, A, Length(A));
end;
(4)用 Move() 函数。参见(3)
const
S = '123456 ';//注意,不是S : string = '123456 ';
var
A : array[0..3] of char;
begin
system.Move(S, A, Length(A));
end;
(5)用 CopyMemory
const
S : string = '123456 ';
var
Buf : array[0..3] of char;
begin
windows.CopyMemory(@Buf, PChar(S),Length(Buf));
end;
(6)用 FillChar 把所有元素初始化为同一值
var
A : array[0..3] of char;
begin
system.FillChar(A,Length(A),97);// 'a '
end;
------解决方案--------------------
已阅
转传说中的MIC同志
------解决方案--------------------
强制转换
const
S = '1234 ';
var
A: array[0..3] of Char;
begin
PInteger(@A[0])^ := PInteger(@S[1])^;
end;
------解决方案--------------------
哎呀 哈哈~` MIC大哥这么有名气了 小弟跟着沾点光先~~
------解决方案--------------------
jf要紧
------解决方案--------------------
简单汇编
const
S: string = '1234 ';
var
A: array[0..3] of Char;
begin
asm
MOV ECX, 4 // 长度
MOV ESI, S
LEA EDI, A[0]
@@Loop:
MOV AL, BYTE PTR [ESI]
MOV BYTE PTR [EDI], AL
INC ESI
INC EDI
DEC ECX
CMP ECX, 0
JZ @@End
CMP AL, 0
JNZ @@Loop
@@End:
end;
end;
本来此贴已删(因为半天没人回贴),但听说传说中的MIC要看一下,所以我又重发出来。
我的目的是想整理一篇《字符数组赋值方法大全》。目前已写了六种。朋友们请提出错误,补充其他方法。也可以讲一些与此相关的有教育意义的知识。我会根据回贴质量,给贴子加分。谢谢大家了。请顺延序号。
《字符数组赋值方法大全》
整理者:LSoft
(1)把数组作为 PChar 处理,且需留最后一个元素放置 NULL
const
S : string = '123 ';
var
A : array[0..3] of char;
begin
SysUtils.StrPCopy(A,S);
end;
(2)把数组作为 PChar 处理,且需留最后一个元素放置 NULL
const
S : string = '123 ';
var
A : array[0..3] of char;
begin
SysUtils.StrCopy(A,PChar(S));
end;
(3)用 Move() 函数。
const
P : PChar = '123456 ';
var
A : array[0..3] of char;
begin
system.Move(P^, A, Length(A));
end;
(4)用 Move() 函数。参见(3)
const
S = '123456 ';//注意,不是S : string = '123456 ';
var
A : array[0..3] of char;
begin
system.Move(S, A, Length(A));
end;
(5)用 CopyMemory
const
S : string = '123456 ';
var
Buf : array[0..3] of char;
begin
windows.CopyMemory(@Buf, PChar(S),Length(Buf));
end;
(6)用 FillChar 把所有元素初始化为同一值
var
A : array[0..3] of char;
begin
system.FillChar(A,Length(A),97);// 'a '
end;
------解决方案--------------------
已阅
转传说中的MIC同志
------解决方案--------------------
强制转换
const
S = '1234 ';
var
A: array[0..3] of Char;
begin
PInteger(@A[0])^ := PInteger(@S[1])^;
end;
------解决方案--------------------
哎呀 哈哈~` MIC大哥这么有名气了 小弟跟着沾点光先~~
------解决方案--------------------
jf要紧
------解决方案--------------------
简单汇编
const
S: string = '1234 ';
var
A: array[0..3] of Char;
begin
asm
MOV ECX, 4 // 长度
MOV ESI, S
LEA EDI, A[0]
@@Loop:
MOV AL, BYTE PTR [ESI]
MOV BYTE PTR [EDI], AL
INC ESI
INC EDI
DEC ECX
CMP ECX, 0
JZ @@End
CMP AL, 0
JNZ @@Loop
@@End:
end;
end;