Что такое '\ 0' в C ++? - PullRequest
       20

Что такое '\ 0' в C ++?

6 голосов
/ 06 августа 2010

Я пытаюсь перевести огромный проект с C ++ на Delphi и заканчиваю перевод. Одна из вещей, которые я оставил, это монстр '\ 0'.

if (*asmcmd=='\0' || *asmcmd==';')

где asmcmd - это символ *.

Я знаю, что \ 0 отмечает конец типа массива в C ++, но мне нужно знать его как байт. Это 0?

Другими словами, будет ли приведенный ниже код эквивалентен строке C ++?

if(asmcmd^=0) or (asmcmd^=';') then ...

где asmcmd - это PAnsiChar.

Вам не нужно знать Delphi, чтобы ответить на мой вопрос, но скажите \ 0 как байт. Это будет работать также. :)

Ответы [ 3 ]

13 голосов
/ 06 августа 2010

'\0' равно 0.Это реликвия из C, которая вообще не имеет строкового типа и использует вместо нее массивы символов.Нулевой символ используется для обозначения конца строки;не очень мудрое решение в ретроспективе - в большинстве других реализаций строк где-то используется выделенная переменная-счетчик, что позволяет найти конец строки O (1) вместо C (n).запутанный способ проверки length(asmcmd) == 0 или asmcmd.is_empty() на гипотетическом языке.

5 голосов
/ 06 августа 2010

Строго говоря, это escape-последовательность для символа с восьмеричным значением ноль (которое, конечно, также равно нулю в любой базе).

Хотя вы можете использовать любое число с префиксом ноль для указания восьмеричного кода символа (например, '\040' - это пробел в кодировке ASCII), у вас редко бывают причины для этого.«\ 0» идиоматично для указания символа NUL (потому что вы не можете набрать такой символ с клавиатуры или отобразить его в редакторе).

Вы также можете указать «\ x0», который является символом NULвыражается в шестнадцатеричном формате.

Символ NUL используется в C и C ++ для завершения строки, хранящейся в массиве символов.Это представление используется для литеральных строковых констант и по соглашению для строк, которыми манипулирует библиотека <cstring> / <string.h>.В C ++ вместо этого можно использовать класс std :: string.

Обратите внимание, что в C ++ символьная константа, такая как '\0' или 'a', имеет тип char.В C, возможно, по неясным причинам, он имеет тип int.

3 голосов
/ 06 августа 2010

То есть символ для null или char значение 0.Используется в конце строки.

...