О чём не пишут в книгах по Delphi
Шрифт:
В первую метку будет выведено число 9 (длина
Потеря куска строки после символа
Хотя символ "Z" присутствует в строке, в которой производится поиск, на экран будет выведен "0", что означает отсутствие искомой подстроки. Это связано с тем, что функция
Описанные проблемы заставляют очень осторожно относиться к возможному появлению символа
3.3.7. Функция, возвращающая AnsiString
Очень интересный "подводный камень", связанный с типом
Если человека, не знакомого с этой особенностью компилятора, попросить предсказать, что появится на экране
в результате выполнения этого кода, его рассуждения будут звучать, скорее всего, примерно так: "Так какОднако эти рассуждения неверны. На экране появится надпись Test1, т.е. первоначальное значение переменной
Именно так компилятор обрабатывает функции, тип результата которых
Из этого следует правило, которое должен помнить разработчик: функция, возвращающая строковое значение, не должна делать никаких предположений о первоначальном значении переменной
Следует заметить, что аналогичным образом компилятор обходится и с другими сложными типами: если функция возвращает такой тип, то
3.3.8. Строки в записях
Поля в записях могут иметь любой строковый тип без дополнительных ограничений. Однако следует учитывать, что, в отличие от полей простых типов, значения полей типа
Для иллюстрации этой проблемы, а также методов её решения нам понадобятся два проекта: RecordRead и RecordWrite (на компакт-диске они оба находятся в папке RecordReadWrite). Обойтись одним проектом здесь нельзя — указатель, переданный в пределах проекта, остается корректным, поэтому проблема маскируется. В проекте RecordWrite три кнопки, соответствующие трем методам сохранения записи в поток
- Telegram
- Viber
- Skype
- ВКонтакте