@VanBer

Почему при ненулевой строке ее длина — 0?

program example;
var
    c: char;
    n, m: integer;
    template: string;
begin
    n := 1;
    while not eof do
    begin
        read(c);
        template[n] := c;
        if c = #10 then
        begin
            for m := 1 to n - 1 do
            begin
                writeln(template[m], #9, m);
            end;
        end;
        n := n + 1;
    end;
    writeln(template[3]);
    writeln(length(template));
end.
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
@zedxxx
Если отвечать на вопрос из заголовка, то:
  1. При отсутствии директивы {$H+} тип string является алиасом на тип ShortString, который хранит длину строки в символе с индексом ноль. Максимальная длина для ShortString равна 255.
  2. Для того, чтобы функция Length правильно работала для ShortString, длину строки нужно задавать функцией SetLength - в самом начале процедуры добавьте вызов setlength(template, 255);

Что касается приведенного кода, то тут возможно несколько вариантов исправления:
  • количество символов в строке у вас равно n-1 - можно использовать это значение;
  • можно включить директиву {H+} или объявить строку как AnsiString и увеличивать длину строки динамически. Перед записью в строку на каждой итерации дабавьте: setlength(template, length(template) + 1); - тогда вызов length(template) вернёт нужное значение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы