Завершение с 0 имеет много тонкостей производительности, которые были очень актуальны еще в конце 60-х.
Процессоры имеют инструкции для условного перехода при тестировании на 0. На самом деле, некоторые процессоры даже имеют инструкции, которые будут повторять / копировать последовательность байтов до 0.
Если вместо этого вы использовали экранированный символ, у вас есть два тестовых ДВУХ различных байта, чтобы утвердить конец строки. Мало того, что это медленнее, но вы теряете возможность повторять по одному байту за раз, так как вам нужен упреждающий просмотр или возможность возврата.
Теперь другие языки (кашель, Паскаль, кашель) используют строки в стиле подсчета / значения. Для них допустим любой символ, но они всегда сохраняют счетчик с размером строки. Преимущество очевидно, но есть и недостатки этого метода.
С одной стороны, размер строки ограничен количеством байтов, которое занимает счет. Один байт дает вам 255 символов, два байта - 65535 и т. Д. Сегодня это может быть почти неактуально, но добавление двух байтов к каждой строке было довольно дорого.
Edit:
Я не думаю, что вопрос тупой. В наши дни языков высокого уровня с управлением памятью, невероятной мощностью процессора и неприличными объемами памяти такие решения из прошлого могут показаться бессмысленными. И действительно, они МОГУТ быть бессмысленными в наши дни, так что это хорошая вещь, чтобы допросить их.