printf %s情况下字符串为NULL的输出结果
遇到问题
|
|
当s为NULL的时候,执行上面三个语句两个语句执行结果分别为:12this(null)segment fault
问题分析
在ANSI C中没有对printf时字符串为NULL的情况进行明确的定义,所以当出现这种情况时往往是未定义行为。
所以上面第一种情况会出现segment fault的情况是一种未定义行为,可能在其他编译器上不会出现段错误。
上面出现段错误的行为我们可以通过反汇编进行查看。
反汇编的结果如下:
|
|
从上面可以看出第一个执行被汇编成真正的printf指令,而第二个简单的printf NULL的指令被汇编成puts。
所以才出现了上面的结果。