printf打印NULL指针

 

printf("%s", NULL) 和 printf("%s\n", NULL) 的区别?


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

printf("%s", (char*)NULL); 
fflush(stdout); 
有什么区别?
为什么前者会导致Segmentation fault
后者打印(null)

----------------------------------------------------------------------------

因为:

glibc 的 printf() 考虑了 %s 的参数是 NULL 的情况。
gcc 编译器会把 printf("%s\n", x) 改写为 puts(x),因为后者不需要 parse format string。
但是 puts() 没有考虑参数是 NULL 的情况。
因此第一种写法会 coredump,第二种不会。

----------------------------------------------------------------------------

reference:

https://www.jianshu.com/p/e8a6c34c38e2

https://www.zhihu.com/question/48338669?from=profile_question_card

你可能感兴趣的:(C/C++)