“%p”printf参数

时间:2017-02-08 18:48:54

标签: c printf format-specifiers

我有这段代码:

#include <stdio.h>
#include <string.h>

void main(){
       printf("%p");
}

这是输出: 0x7ffdd9b973d8

我知道%p代表指针,当使用它时,例如

#include <stdio.h>
#include <string.h>

void main(){
 int i = 0;
 printf("%p", i);
}

它返回i的指针地址。但我的问题是,当不在printf函数中添加任何其他参数时,它会返回什么printf("%p")

3 个答案:

答案 0 :(得分:4)

的行为
printf("%p");

未定义。在格式字符串中指定%p格式时,参数列表中应存在void *(或char *)类型的相应参数。

答案 1 :(得分:4)

回收站。 printf使用可变长度参数列表。它使用格式字符串来确定实际传递的参数数量。如果你实际上没有传入任何内容,它仍然会从内存的基本任意部分读取,就像你那样。结果是undefined / trash。

有些编译器能够通过警告来捕获这种情况,因为printf系列函数非常受欢迎。如果函数尝试从您无权访问的内存中读取,某些情况可能会导致系统崩溃。即使你已经获得某种结果,也无法告诉它下次的行为。

答案 2 :(得分:4)

  

但我的问题是,如果不在printf函数中添加任何其他参数,只返回printf(“%p”);

任何。没有。随机垃圾。也许它会崩溃。

如果不调查编译器,CPU,平台,库,执行环境等的特定组合,就无法知道。没有任何规则要求它以任何特定方式运作。