【问题标题】:How can I assign a value to a Char array?如何为 Char 数组赋值?
【发布时间】:2011-08-13 16:17:52
【问题描述】:

假设我有变量:

Var question : array[1..50] of char;

当我这样做时:

question := 't'; //What is the correct way to change the value?

它返回一个错误:

不兼容的类型:'array[1..50] of Char' 和 'Char'

注意:我希望最大字符串大小为 50 个字符,而不是 50 个不同的字符。

这个问题的原因是我在另一个单元中有一条记录(这只是一个基本示例,不是我上面实际写的)在那个单元中我有一个记录,我不能使用字符串数据输入(或者有没有办法?如果有请解释)。我只需要知道如何给一个字符数组赋值。

【问题讨论】:

  • 在记录中声明字符串时遇到什么错误?这绝对是可能的,而且比处理字符数组要简单得多。
  • 不兼容的类型:'array[1..50] of Char' 和 'Char' 就是其中之一。但是,如果我将字符串中的字符数量与数组的范围相匹配,它就会起作用。
  • 只是一个建议,请仔细阅读本教程,它将帮助您了解一些delphi结构和基础...delphi.about.com/od/beginners/a/delphicourse.htm
  • 那是你在 this 声明时得到的错误,它不可能是你尝试在记录中使用字符串时得到的错误。
  • 感谢 Nain,我会阅读它,但我目前的项目时间有点短。但是,即使主题会发生变化,我也会阅读它。 @Lieven,我会提供整个项目代码。

标签: arrays delphi char variable-assignment


【解决方案1】:

如果您不需要 unicode 字符,您应该只定义您的字符串,如 string[50]

之后,您不需要任何函数或转换来处理该字符串,并且将其读取和写入文件一样容易。

Hscores = record
var
  _topscore : integer;
  _topname : string[50];
end;  

【讨论】:

  • 这是处理记录中固定长度的 ansi 字符串数据的最惯用方式。 +1 指出 String[50] 实际上是由 AnsiChar(字节大小)元素组成的固定长度字符串。
【解决方案2】:

虽然 Delphi 字符串和 char 数组是相关的,但它们并不相同。

Delphi 将字符串和字面量(char 和 string)重载到 char 数组,但仅当数组下界为零时。

以下代码适用于 D2007 和 Delphi XE:

  var x : array[0..49] of char;
  begin
    x:='b';  // char literal
    x:='bb';  // string literal      
  end.

如果我将 [0 更改为 [1 它将失败。这种限制可能会简化处理此问题的语言助手,并且该功能可能仅用于处理转换后的 C 结构,其中数组始终具有下限 0。

【讨论】:

  • @Skeela87,如果它对你有用,那很好,但它也应该用纯字符串工作(编译)。它使用 Delphi 5 (在删除记录声明中的 var 之后)和 Delphi 2010 为我编译
  • Lieven:我猜他想blockwrite记录。不,那么你只能使用短字符串,但它有 255 个字符的限制和一个前导长度字节。
【解决方案3】:

我很确定您可以在记录类型中使用字符串。

此博客条目显示了一个示例:http://delphi.about.com/od/beginners/a/record_type.htm

为了给 Char 数组赋值,你必须像其他数组一样对其进行索引:

question[1] := 't';

【讨论】:

  • 我尝试使用您提供的链接中的示例,但仍然出现该错误。我对delphi还不是很好,所以我可能做错了什么。虽然我只是想知道如果我把 char 数组 [1..5] 放入,我必须使用 5 个字符长的字符串。现在我需要一种能够放置我喜欢的长度的方法。感谢您的回复,但也许我应该改写我的问题,我会在主帖中进行编辑。
  • 这里在这种情况下,索引从 1 开始,所以 (question[0] := 't';) 将再次给出编译时数组绑定错误,question[1] := 't';更好:)
  • @Nains:啊!自从我使用 Delphi 以来。
【解决方案4】:

您确定不能在记录中使用字符串数据类型吗? 总之……

type
  TCharArray = array[Char] of Char;

function StringToArray(Str: string): TCharArray;
begin
  FillChar(Result, High(Byte), #0);
  Move(Str[1], Result, length(Str));
end;

procedure TestCharArray;
var
  question: TCharArray;
begin
  question := StringToArray('123');
  ShowMessage(PChar(@question));
end;

另外看看StrPCopy函数。

【讨论】:

  • 没关系,我知道我忘了做什么。放到TForm类中
  • 但是将您的代码与 StringToArray('test') 一起使用。我收到错误:不兼容的类型:'array[0..65535] of Char' 和 'System.TArray'
猜你喜欢
  • 2013-02-01
  • 2012-08-23
  • 2013-01-03
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多