Как я могу присвоить значение массиву Char? - PullRequest
3 голосов
/ 27 апреля 2011

Скажем, у меня есть переменная:

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

Когда я делаю:

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

Возвращает ошибку:

Несовместимые типы: 'массив[1..50] для Char 'и' Char '

Примечание. Я хочу, чтобы максимальный размер строки составлял 50 символов, а не 50 различных символов.

Причинаэтот вопрос заключается в том, что у меня есть запись в другом модуле (это просто базовый пример, а не то, что я на самом деле написал выше) В этом модуле у меня есть запись, в которой я не могу использовать строковый тип данных (или естьспособ? пожалуйста, объясните, если есть).Мне просто нужно знать, как дать массиву символов значение.

Ответы [ 4 ]

8 голосов
/ 27 апреля 2011

Хотя строки Delphi и массивы char связаны, они не совпадают.

Delphi перегружает присвоение строк и литералов (char и string) массиву символов, но только когда нижняя граница массиваноль.

Следующий код работает для меня в D2007 и Delphi XE:

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

Если я изменю [0 на [1, это не удастся.Это ограничение, вероятно, упрощает языковой помощник, который позаботится об этом, и, вероятно, эта функция предназначена только для работы с преобразованными структурами C, где массивы всегда имеют нижнюю границу 0.

2 голосов
/ 27 апреля 2011

Если вам не нужны символы Юникода, вы должны просто определить свою строку как string[50].

После этого вам не нужны никакие функции или преобразования для работы с этой строкой, и ее будет так же легко читать и записывать в файл.

Hscores = record
var
  _topscore : integer;
  _topname : string[50];
end;  
2 голосов
/ 27 апреля 2011

Вы уверены, что не можете использовать строковый тип данных в записи?В любом случае ...

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.

1 голос
/ 27 апреля 2011

Я почти уверен, что вы можете использовать строки в типах записей.

Эта запись блога показывает пример: http://delphi.about.com/od/beginners/a/record_type.htm

Чтобы присвоить значение массиву Char, его необходимо проиндексировать, как и любой другой массив:

question[1] := 't';
...