Jakie jest zachowanie drukowania NULL ze specyfikatorem% s printf?

Spotkał się z ciekawym pytaniem z wywiadu:

test 1:
printf("test %s\n", NULL);
printf("test %s\n", NULL);

prints:
test (null)
test (null)

test 2:
printf("%s\n", NULL);
printf("%s\n", NULL);
prints
Segmentation fault (core dumped)

Chociaż może się to udać w niektórych systemach, przynajmniej moja kopalnia zgłasza błąd segmentacji. Jakie byłoby najlepsze wyjaśnienie tego zachowania? Powyższy kod jest w C.

Oto moje informacje o gcc:

deep@deep:~$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

questionAnswers(4)

yourAnswerToTheQuestion