2014-09-25 2 views
-2

Я проверил следующие тесты на моем Linux-поле.Почему printf не работает для строки NULL?

тест 1:

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

печатает:

test (null) 
test (null) 

тест 2:

printf("%s\n", NULL); 
printf("%s\n", NULL); 

печатает

Segmentation fault (core dumped) 

В чем разница в вышеприведенных тестах? Почему ошибка сегментации не выбрасывается в тест 1 выше?

Я не мог понять, почему во втором тесте он не распечатывается?

+1

Это неопределенное поведение, вы не можете получить согласованные результаты. –

ответ

2

Включите предупреждения в своем компиляторе. Вы не печатаете то, что считаете себя.

Мой компилятор был бы рад сообщить Вам, что (в обоих случаях):

warning: reading through null pointer (argument 2) [-Wformat] 
warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘void *’ [-Wformat] 

В Red Alert говорит, ALERT !, что вы делаете это неопределенное поведение.

Кроме того, не забудьте проверить связанный answer, чтобы получить более подробный ответ, который находится недалеко от меня.

+0

@kadina, я вижу, что у вас есть -2, а связанный ответ, который я написал, имеет +8. Я думаю, это происходит потому, что уже был ответ, но вы этого не искали. Я сделаю вам +1 для баланса, но в следующий раз убедитесь, что вы ищете лучше. :) – gsamaras

+0

Спасибо, Самарас. – kadina

Смежные вопросы