Рубрики

Передача NULL в printf в C

Рассмотрим следующий фрагмент кода Си.

char* p = NULL;
printf("%s", p);

Каким должен быть вывод вышеуказанной программы?
Печать ожидает завершенный массив символов '/ 0' (или строковый литерал), тогда как она получает нулевой указатель. Передача NULL в printf — неопределенное поведение.

Согласно разделу 7.1.4 (из C99 или C11): использование библиотечных функций

Если аргумент функции имеет недопустимое значение (например, значение вне домена функции, или указатель вне адресного пространства программы, или нулевой указатель, или указатель на неизменяемое хранилище при соответствующем параметре не является константно-квалифицированным) или тип (после повышения) не ожидается функцией с переменным числом аргументов, поведение не определено.

Некоторые компиляторы могут выдавать ноль, а другие — ошибки сегментации. GCC печатает (ноль).

// Эффект передачи нулевых указателей на (% s)
// printf в C
#include <stdio.h>

  

int main()

{

   char* p = NULL;

   printf( "%s", p);

   return 0;

}

Выход в GCC:

(null)

Обратите внимание, что приведенная выше программа может вызывать неопределенное поведение в соответствии со стандартом C.

Эта статья предоставлена Адитьей Чаттерджи . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Передача NULL в printf в C

0.00 (0%) 0 votes