Ещё вопрос. Почему в си были встроены строки с символом в конце. Для нахождения длины строку требуется перебрать все символы, до конечного символа. Производительности это не прибавляет.
Можно было пойти по стопам basic, bstr строки длина строки хранится в байте или в 4 байтах, к примеру в реализациях delphi, visual basic, object pascal.
В pascale вирт сразу заложил такие строки, но они были ограничены 1 байтом, но что мешало раширить их в си 2 или 4 байтами. Не думаю, что 70-ых годах оперировали 2 гигобайтными строками.
Я знаю, что можно сделать свои динамические строки в си. Но зачем велосипедствовать, если их можно встроить. Как минимум их ненужно освобождать, что облегчает и повышает качество кода.