Установка строки в ноль в C - PullRequest
5 голосов
/ 10 апреля 2011

Установка строки в '\ 0' - это то же самое, что установка строки в NULL на других языках? Или ... установка строки в '\ 0' означает, что строка просто пуста?

char* str = '\0'

У меня есть разные функции для пустых и пустых строк, поэтому я не хочу случайно вызывать одну из моих пустых строковых функций для пустой строки.

Ответы [ 2 ]

16 голосов
/ 10 апреля 2011

Ваша строка char *str = '\0'; на самом деле DOES установить для str значение (эквивалентное) NULL.Это потому, что '\0' в C является целым числом со значением 0, которое является допустимой константой нулевого указателя.Это чрезвычайно запутанно: -)

Создание str (указатель на) пустой строки выполняется с str = ""; (или с str = "\0";, что заставит str указывать на массив два ноль байтов).

Примечание: не путайте вашу декларацию с оператором в строке 3 здесь

char *str;
/* ... allocate storage for str here ... */
*str = '\0'; /* Same as *str = 0; */

, который делает что-то совершенно другое: он устанавливает первый символстрока, на которую str указывает на нулевой байт, в результате чего str указывает на пустую строку.

Терминология придирка: строки не могут быть установлены в NULL;строка C - это массив символов, в котором где-то есть символ NUL.Без символа NUL это просто массив символов, и его нельзя передавать функциям, ожидающим (указатели на) строки.Однако указатели являются единственными объектами в C, которые могут иметь значение NULL.И не путайте макрос NULL с символом NUL: -)

1 голос
/ 10 апреля 2011

Нет, в этом случае вы указываете на реальную (ненулевую) строку длиной 0. Вы можете просто сделать следующее, чтобы установить для нее фактический нуль:

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