Null-terminate string: используйте '\ 0' или просто 0?
Если мне нужно обнулить конец строки, следует ли использовать \0
или просто 0
также достаточно?
Есть ли разница между использованием
char a[5];
a[0] = 0;
и
char a[5];
a[0] = '\0';
Или \0
просто предпочел, чтобы было ясно, что я заканчиваю нуль здесь, но для компилятора это то же самое?
Ответы
Ответ 1
Используйте '\ 0' или просто 0?
Нет никакой разницы в стоимости.
В C нет разницы в типе: оба значения int
.
В С++ у них разные типы: char
и int
. Таким образом, край переходит к '\0'
, поскольку нет преобразования типа.
Различные руководства по стилю продвигают друг друга. '\0'
для ясности. 0
из-за отсутствия помех.
Правильный ответ: Используйте стиль, основанный на стандартах/рекомендациях группового кодирования. Если у вас нет такого руководства, сделайте это. Лучше использовать его, чем иметь расходящиеся стили.
Ответ 2
'\0'
представляет собой escape-последовательность для восьмеричного литерала со значением 0. Так что нет никакой разницы между ними
Боковое примечание: если вы имеете дело со строками, вы должны использовать std::string
.
Ответ 3
'\0'
точно совпадает с 0
, несмотря на тип. '\0'
- это просто представление как литерал char
. Тип char
может быть инициализирован из простых int
литералов.
Так что на самом деле невозможно сказать, что лучше, просто имейте в виду использовать его последовательно в своем коде.
Ответ 4
Оба будут генерировать один и тот же машинный код, так как 0
будет преобразован в значение символа 0
, а '\0'
- это еще один способ записать значение символа 0
. Последний, очевидно, является персонажем, поэтому он покажет, что вы случайно не хотели писать '0'
вместо этого, но в конце концов это точно то же самое в конце.
Ответ 5
Это то же самое. Посмотрите на таблицу ascii.
Лучше с моей точки зрения использовать '\ 0', потому что вы говорите, что конец строки.
Это помогает, когда вы читаете свой код (например, используя NULL для указателя вместо 0).