w*******t 发帖数: 62 | 1 为什么 1 和 2 的结果不同?
1. printf("%s\n", NULL);
结果: Segmentation fault (core dumped)
2. printf("add string %s\n", NULL);
结果: add string (null) |
h*c 发帖数: 1859 | 2 gcc -fno-builtin-printf
【在 w*******t 的大作中提到】 : 为什么 1 和 2 的结果不同? : 1. printf("%s\n", NULL); : 结果: Segmentation fault (core dumped) : 2. printf("add string %s\n", NULL); : 结果: add string (null)
|
w*******t 发帖数: 62 | 3 多谢!
查了一下 -fno-builtin-printf, 说是不把printf转换成puts。是这样吗?
可是要转都转,要么都不转。还是不明白1和2的结果为什么不同啊?
【在 h*c 的大作中提到】 : gcc -fno-builtin-printf
|
h*c 发帖数: 1859 | 4 puts calls strlen
【在 w*******t 的大作中提到】 : 多谢! : 查了一下 -fno-builtin-printf, 说是不把printf转换成puts。是这样吗? : 可是要转都转,要么都不转。还是不明白1和2的结果为什么不同啊?
|
p*i 发帖数: 411 | 5 By default a call to printf("%s\n", p) is converted at compile time to puts(
p) (it's faster).
That's why printf("%s", NULL) will succeed, since it won't be converted (
missing '\n').
【在 w*******t 的大作中提到】 : 多谢! : 查了一下 -fno-builtin-printf, 说是不把printf转换成puts。是这样吗? : 可是要转都转,要么都不转。还是不明白1和2的结果为什么不同啊?
|