Я думаю, вы смущены. В то время как C-строки имеют «нулевое завершение», символ «NULL» отсутствует. NULL
- это имя для нулевого указатель. Терминатор для C-строки является нулевым символом , то есть байтом со значением нуля. В ASCII этот байт (несколько смутно) называется NUL
.
Предположим, что ваш класс содержит массив char
, который используется для хранения строковых данных. Вам не нужно «отмечать конец массива»; массив имеет определенный размер, который устанавливается во время компиляции. Вам нужно знать, какая часть этого пространства используется; нуль-терминатор на строковых данных выполняет это для вас, но вы можете получить лучшую производительность, фактически сохраняя длину. Кроме того, класс «строка» со статическим буфером символов не очень полезен, потому что этот размер буфера является верхним пределом длины строк, которые вы можете иметь.
Таким образом, лучший класс строк будет содержать указатель типа char*
, который указывает на динамически распределенный массив (new[]
) char
. Опять же, нет смысла «отмечать конец массива», но вам нужно будет запомнить как длину строки (т. Е. Объем используемого пространства), так и размер выделения (т. Е. Объем пространства, могут быть использованы до того, как вам придется перераспределить).
Что вы подразумеваете под «вмешательством». Можете ли вы опубликовать любой код, чтобы показать, что вы описываете? – SpeksETC 2010-12-02 18:26:17
Это C или C++? Какой тип строк вы сохраняете? – 2010-12-02 18:26:18
@Sht C++. Извините, я не прояснил это. @SpeksETC Я имею в виду, что, поскольку строки имеют нуль-конец (я думаю?), Пустая строка будет иметь то же значение, что и значение «конец массива». – Maxpm 2010-12-02 18:27:52