Это неверно. Строки ISO и более ранние версии Pascal также начинаются с одного. Это просто общее соглашение, и на самом деле s [0] является результатом того, что он вакантный и дешевый для кодирования в интерпретаторе байт-кода UCSD. Но этот последний бит до моего времени, так что только мои догадки.
Это происходит из-за способности Паскаля иметь произвольные верхние и нижние границы, что обеспечивает более безопасный тип доступа к массивам.
Действительно старые строки Паскаля (до начала восьмидесятых) были даже хуже, чем струны Си. Использовалось несколько соглашений, но все они основывались на статических массивах (например, ранний C), но они, как правило, были дополнены пробелами, поэтому вы должны были сканировать от конца до конца пробелов.
(убрал унаследованный тег, поскольку основание на 1 не является унаследованным. Доступ к s [0] как длине является унаследованным, но вопрос не в этом)