A char*
- это просто указатель на символ.Чтобы интерпретировать его как строку, вам нужна длина, либо явная (строки паскаля сохраняют ее перед первым символом, либо вы можете передать информацию о длине рядом с ним в качестве другого аргумента или члена структуры), либо неявно (нулевое завершение).
Строковое представление - это абстракция второго из вышеперечисленных.В отличие от 1-го или 3-го, он не требует данных, смежных со строковым буфером, чтобы содержать информацию о длине.Это означает, что вы можете создавать не принадлежащие подстроки за O (1) время без копирования, чего не могут сделать другие два подхода.
Определение длины строки для 1-го и 2-го случая выше - это O (1) иO (n) для нулевого завершения.Это имеет значение.
Строковое представление не имеет фундаментальных преимуществ перед парой char*
или char*
в паре с длиной;все, что вы получаете по сравнению с этими, это полезные методы.Но он принципиально отличается от нулевого терминированного буфера символов.