gpt4 book ai didi

delphi - 将字符串分配给字符数组

转载 作者:行者123 更新时间:2023-12-03 18:59:31 25 4
gpt4 key购买 nike

问题一

我有

var example : array[0..15] of char;


我想将输入中的值分配给该变量

example := inputbox('Enter Name', 'Name', '');




在高分单元中,我有记录和数组

type
points = record
var
_MemoryName : array[0..15] of char;
_MemoryScore : integer;
end;

var
rank : array[1..3] of points;




var s: string;
a: packed array[0..15] of char;

highscoresdata.position[1]._MemoryName := StrPLCopy(a, s, Length(a)) ;


返回->(186): E2010 Incompatible types: 'array[0..15] of Char' and 'PWideChar'

var s: string;
a: packed array[0..15] of char;

s := InputBox('caption', 'Caption', 'Caption');
FillChar(a[0], length(a) * sizeof(char), #0);
Move(s[1], a[0], length(a) * sizeof(char));
scores.rank[1]._MemoryName := <<tried both s and a>> ;


返回 (189): E2008 Incompatible types

最佳答案

问题一

有很多方法。一种是:

procedure TForm1.FormCreate(Sender: TObject);
var
s: string;
a: packed array[0..15] of char;
begin
s := InputBox(Caption, Caption, Caption);
assert(length(s) <= 16);
FillChar(a[0], length(a) * sizeof(char), #0);
Move(s[1], a[0], length(s) * sizeof(char));
end;


我怀疑,但是对于您的原始问题可能会有更优雅的解决方案。

问题二

每次您希望函数/过程没有特定的参数时,您都应该意识到项目的设计可能存在问题。尽管如此, Sender参数是多余的并不少见,因为VCL(特别是 TNotifyEvent)的设计使它们几乎不存在。如果您知道接收过程不关心 Sender参数,则只需为其提供任何内容,例如 Selfnil

问题三

考虑以下代码:

procedure TForm4.FormCreate(Sender: TObject);
var
a: packed array[0..15] of char;
b: packed array[0..15] of char;
begin
a := b;
end;


这行不通。您不能将数组像字符串一样对待。特别是,您不能分配这样的静态数组( a := b)。

相反,您必须执行类似...

Move(b[0], a[0], length(a) * sizeof(char));


...或者简单地循环并一次复制一个值。但是,如果声明静态数组类型,则上面的简单赋值( a := b)确实可以工作:

type
TChrArr = packed array[0..15] of char;

procedure TForm4.FormCreate(Sender: TObject);
var
a: TChrArr;
b: TChrArr;
begin
b := a;
end;

关于delphi - 将字符串分配给字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5823124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com