Определяется ли печать строки NULL? - PullRequest
3 голосов
/ 10 января 2012

Имеет ли этот код определенное поведение?

char *str = NULL;
printf("%s\n",str);

В контексте стандартов C ++ (98/03 и 11) и C (99).

Ответы [ 3 ]

4 голосов
/ 10 января 2012

неопределенное поведение в C

(C99, 7.19.6.1p8) "s Если модификатор длины l отсутствует, аргумент должен быть указателем на начальный элемент массива символов типа ".

с некоторыми компиляторами / libc выводит (null), а с некоторыми другими - segfaults.

(Примечание: в C нарушение shall, которое не является ограничением, является неопределенным поведением, см. 4.p2 "Соответствие" в Стандарте C)

1 голос
/ 10 января 2012

Да.

printf будет разыменовывать указатель str, а разыменование пустого указателя будет UB.

0 голосов
/ 10 января 2012

Отмена ссылки на указатель null в C приводит к undefined behavior, что может быть катастрофическим. Однако большинство реализаций просто останавливают выполнение рассматриваемой программы, как правило, из-за ошибки сегментации.

Пожалуйста, отметьте это

...