Что такое «Null Terminated String»?

Я только что начал читать C ++, и я натолкнулся на термин «Null Terminated String», я прочитал об этом, но не мог понять, что это на самом деле означает.

Я также хочу знать, в чем разница между c-строкой (также называемой «Null terminated String») и строкой c ++.

c++ c
6 голосов | спросил user1606191 4 Jpm1000000pmFri, 04 Jan 2013 16:09:53 +040013 2013, 16:09:53

5 ответов


15

Короткий ответ: строка с нулевым завершением представляет собой массив символов с нулевым значением (0x00) после последнего допустимого символа в строке.


Длительный ответ:

Важно помнить, что не каждый компилятор C и C ++ инициализирует значения для вас. AFAIK, большинство нет.

Базовая строка в C или C ++ (без STL) - это просто массив символов.

char myString[25];

В этот момент мы имеем no idea , что находится внутри этой строки. Он может быть пустым; у него могут быть символы мусора (скорее всего); или он может иметь значимую информацию. Все зависит от того, что было в этом сегменте памяти до объявления массива.

Обратите внимание, что здесь у нас есть 24 символа памяти, а нуль примет 25-й символ.

Обычно принято предварительно заполнять и очищать строку нулями, чтобы избавиться от любого мусора.

memset(myString, 0x00, 25);

Обратите внимание, что в этом случае я использую шестнадцатеричное объявление 0 для указания NULL. Некоторые компиляторы и /или библиотеки имеют значение NULL или аналогичные.

Многие основные строковые функции, такие как strcmp, strcat и т. д.) полагаются на строки с нулевым завершающим символом, чтобы указать конец строки. Если у вас его нет, функция строки может выходить из конца строки и не действовать так, как вы ожидали.

Строка C ++ STL является фактическим объектом и заботится о некоторых из этих проблем инициализации /завершения для вы.

ответил GlenH7 4 Jpm1000000pmFri, 04 Jan 2013 16:23:25 +040013 2013, 16:23:25
12

В компьютерном программировании строка с завершающим нулевым символом является символьной строкой, хранящейся в виде массива, содержащего символы, и заканчивается нулевым символом ('\ 0', называемым NUL в ASCII).

http://en.wikipedia.org/wiki/Null-terminated_string

ответил Pieter B 4 Jpm1000000pmFri, 04 Jan 2013 16:14:28 +040013 2013, 16:14:28
2

Строки с нулевым завершением не похожи на строки на большинстве других языков. Они являются стандартным способом представления строк в C, как не более чем массив символов в последовательном порядке. На языке, подобном C ++, строка является фактическим объектом с параметрами и т. Д.

Проблема с этим массивом символов заключается в том, как вы знаете, когда прекращать чтение, где заканчивается строка? Поскольку нулевой символ не используется ни для чего другого, он используется для завершения строки, т. Е. Для обозначения конечной точки.

ответил Joe Z. 4 Jpm1000000pmFri, 04 Jan 2013 18:52:27 +040013 2013, 18:52:27
1

Чтобы ответить на второй вопрос, строка C ++ представляет собой экземпляр класса std::string, который является частью стандартной библиотеки C ++ .
С-строка (или строка стиля c, или строка с завершающим NUL) представляет собой последовательность символов, которая заканчивается на первом '\0' ( ASCII NUL).

Одно важное отличие состоит в том, что std::string может содержать встроенные символы NUL внутри своего содержимого, но строка C-стиля по определению не может (поскольку он заканчивается с первым символом NUL).

Таким образом, термин «завершенная строка NUL» (часто «с ошибкой» с завершением с нулевой отметкой) происходит из того факта, что такая строка заканчивается (заканчивается) NUL ('\0').

ответил Bart van Ingen Schenau 4 Jpm1000000pmFri, 04 Jan 2013 18:44:17 +040013 2013, 18:44:17
1

Строка с нулевым символом - это последовательность символов с конечным 0-значным символом. Таким образом, строка типа "Hi" представляется в виде последовательности {72, 105, 0} (ASCII). 0 - это дозорное значение, указывающее конец строки. Функции библиотеки строк C (strcmp, strcpy и т. д.) полагаются на наличие этого 0 байта для правильной работы.

Это отличается от строк BASIC Pascal или старой школы, которые сохраняют длину строки в ведущем байте ({2, 72, 105}).

В C строки хранятся в массивах char.

Класс C ++ string использует строки с нулевым завершением под капотом (по крайней мере, в реализациях, с которыми я знаком), но его интерфейс таков, что вам обычно не приходится беспокоиться об этом уровне детализации.

ответил John Bode 4 Jpm1000000pmFri, 04 Jan 2013 19:06:35 +040013 2013, 19:06:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132