О строках в мобильных приложениях уже писали, и, наверное не раз, но как-то все-равно осталось не замеченным. По крайней мере я почему-то не принял к сведению, хотя задним числом и вспомнил, что читал. Поэтому “пост-напоминалка”.
Предположим, есть есть FireMonkey приложение и такой код:
procedure TfMainTexturesTest.Button1Click(Sender: TObject); var s: string; begin s:= 'Нет войне! Даешь рок-н-ролл!'; ShowMessage(s[1]+' '+s[5]+' '+s[12]); end;
При запуске в Windows результат будет очевидным:
Попробуем запустить приложение под Android:
Очевидно, что в первом случае индексация символов в строке начинается с 1, а во втором с нуля. Сделано так не случайно, этимология данного вопроса рассмотрена в блоге у Александра Алексеева. Настоятельно рекомендую к прочтению.
И в заключение о совместимости кода. Директива компилятора $ZEROBASEDSTRINGS.
Если мы, к примеру принудительно поставим
{ZEROBASEDSTRINGS ON},
то и Windows и Android приложения отработают так. как показано на втором рисунке.
Так что. будьте бдительны, данный нюанс нужно учитывать. во избежание ошибок.
PS
Данный пост стал возможен благодаря Владимиру, электрику из Харькова, который не дал мне остаться без электричества.
Оставить комментарий