[征集] 关于字符数组赋值方法. 另:传说中的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;