Ваша строка 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: -)