Я думаю, что вы в замешательстве. В то время как C-строки имеют нулевое окончание, символа «NULL» нет. NULL
- это имя для нулевого указателя . Терминатором для C-строки является нуль символ , то есть байт со значением ноль. В ASCII этот байт (несколько запутанно) называется NUL
.
Предположим, ваш класс содержит массив char
, который используется для хранения строковых данных. Вам не нужно «отмечать конец массива»; массив имеет определенный размер, который устанавливается во время компиляции. Вы должны знать, сколько из этого пространства фактически используется; нулевой терминатор в строковых данных выполняет это за вас, но вы можете получить лучшую производительность, фактически запомнив длину. Кроме того, «строковый» класс со статическим размером буфера символов вообще не очень полезен, потому что этот размер буфера является верхним пределом длины строк, которые вы можете иметь.
Таким образом, лучший строковый класс будет содержать указатель типа char*
, который указывает на динамически размещаемый (через new[]
) массив из char
с. Опять же, не имеет смысла «отмечать конец массива», но вы захотите запомнить как длину строки (т. Е. Объем используемого пространства), так и размер выделения (т. Е. Объем пространства, которое может быть использовано перед перераспределением).