2016-03-02 9 views
11

Если мне нужно обнулить строку String, я должен использовать \0 или просто 0 тоже достаточно?Null-terminate string: используйте ' 0' или просто 0?

Есть ли разница между использованием

char a[5]; 
a[0] = 0; 

и

char a[5]; 
a[0] = '\0'; 

Или это \0 просто предпочла, чтобы понять, что я нуль оконечным здесь, но для компилятора это одна и та же?

+6

Для C++ просто используйте 'std :: string' и забудьте о строках C. – crashmstr

ответ

8

Использовать '\ 0' или просто 0?

Нет никакой разницы в стоимости.
В C нет разницы в типе: оба являются int.
В C++ у них есть разные типы: char и int. Таким образом, край идет до '\0', так как нет преобразования типов.

Различные руководства по стилю продвигают друг над другом. '\0' для наглядности. 0 за отсутствие беспорядка.

Правильный ответ: Используйте стиль, основанный на стандартах/руководствах по кодированию вашей группы. Если у вас нет такого руководства, сделайте это. Лучше использовать его, чем иметь расходящиеся стили.

7

'\0' точно такой же, как 0, несмотря на тип. '\0' - всего лишь представление как литерал char. Тип char может быть инициализирован из простого int литералов.

Так что на самом деле невозможно сказать, что лучше, просто имейте в виду использовать его последовательно в своем коде.

+0

Подробнее: В C '' \ 0'' более правильно называется константой _character_. Только литералы C указывают _string literal_ и _compound literal_. – chux

+3

Примечание: В C символьные константы, такие как '' \ 0'', имеют тип 'int', а не' char'. –

1

Это то же самое. Посмотрите на таблицу ascii.

Лучше с моей точки зрения использовать '\ 0', потому что вы говорите, что конец строки.

Это помогает, когда вы читаете свой код (например, используя NULL для указателя вместо 0).

+2

_ «Посмотрите на таблицу ascii». _ Как насчет таблиц символов EBCDIC? Это все еще будет верно? –

14

'\0' является escape sequence для octal literal со значением 0. Таким образом, нет никакой разницы между ними

Side Примечание: если вы имеете дело со строками, чем вы должны использовать std::string.

6

Оба будет генерировать тот же машинный код, а 0 будет преобразован в значение символов 0 и '\0' это просто еще один способ записи значения символа 0. Последний, очевидно, является персонажем, поэтому он покажет, что вы случайно не имели в виду написать '0', но кроме этого, это в точности то же самое в конце.

+2

Примечание: В C символьные константы, такие как '' \ 0'', имеют тип 'int', а не' char'. –