Я работаю на кусок кода, который имеет заявление, как показано ниже:если (memcmp (версия, " x0 x0 x0", 3) == 0)
if (memcmp (version, "\x0\x0\x0", 3) == 0)
Что данные что сравнивается с версией? Это то же самое, что и сравнение с «000»?
Я работаю на кусок кода, который имеет заявление, как показано ниже:если (memcmp (версия, " x0 x0 x0", 3) == 0)
if (memcmp (version, "\x0\x0\x0", 3) == 0)
Что данные что сравнивается с версией? Это то же самое, что и сравнение с «000»?
Номер \ x0 - буква для NULL. «000» - это число и имеет другое представление в памяти.
'\ x0' (или' \ 0') является литералом для символа NUL. NULL (с двумя L) обычно зарезервирован для указателя. –
'' 000 "' не является числом - это строка. – mizo
Нет, это не то же самое, что и "000"
. Он сравнивает три нулевые (0) байта. Каждый байт представляет собой фактическое значение нуля в двоичном формате. Это отличается от "000"
, который является строка, содержащая значения ASCII для печати характера0
, который является 48 (или 30 в шестнадцатеричной.)
Так "000"
будет такой же, как "\x30\x30\x30"
.
Нет - не сравнимо с "000"
. Это сравнение с тремя нулевыми символами. Эквивалентная и, вероятно, более ожидаемая строка будет "\0\0\0"
. Или просто 3-значный массив, заполненный 0
, для этого случая, где код проверяет только 3 символа.
Если вы хотите быть хитрым, вы можете использовать '' \ 0 \ 0 "' (и 'sizeof" \ 0 \ 0 "' для размера). –
"\x0\x0\x0"
всего: { 0x00, 0x00, 0x00, 0x00 }
. Четвертый нуль - это нулевой ограничитель строки.
Итак, чтобы ответить на ваш вопрос - нет, это не то же самое, что в сравнении с "000"
.
'\x0'
- шестнадцатеричный нуль, тогда как '0'
- код ASCII символа 0
(шестнадцатеричный 30).
\x0
означает char
со значением 0. 0
отличается, это символ ASCII с кодом 0x30.
Было бы интересно узнать определение переменной version
. Это void *
или char *
или какое-то другое странное литье. Это, вероятно, вызывает предупреждение во время компиляции.
Было бы также разумно посмотреть, как инициализируется version
, чтобы убедиться, что ошибок нет. Это, безусловно, странный способ проверить (отсутствие) номер версии в программе.
Сторона примечания: В этом очень специальном случае каждый «х» не нужен. – Mehrdad