Разве неправильно завершать к-строку с 0 вместо '\ 0'? - PullRequest
3 голосов
/ 13 февраля 2010

C-строки заканчиваются нулем, что означает, что в массиве char символ с индексом strlen() является байтом со всеми битами, установленными на 0. Я видел код, где вместо '\0' используется целое число 0. Но так как sizeof(int) > sizeof(char), это может фактически записать за пределы выделенного пространства для массива - я не прав? Или компилятор неявным образом приводит int к char в такой ситуации?

Ответы [ 2 ]

13 голосов
/ 13 февраля 2010

При сохранении значения 0 в массиве char с, int будет неявно преобразовано в char.

На самом деле тип '\0' равен int (вопреки тому, что можно ожидать), поэтому somechararray[x]=0 и somechararray[x]='\0' семантически эквивалентны.

Лично я предпочитаю использовать '\0', чтобы было более понятно, что я имею дело со строкой.

10 голосов
/ 13 февраля 2010

Да, вы не правы - нулевое значение будет усечено. В конце концов, если вы напишите:

char c = 0;

Вы не ожидаете, что компилятор будет писать за пределами переменной c, я надеюсь Если вы напишите что-то вроде этого:

char c = 12345;

тогда компилятор должен предупредить вас об усечении. GCC производит:

c.c:2: warning: overflow in implicit constant conversion

но ничего не будет записано за пределы переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...