"%p" printf 参数
The "%p" printf parameter
我有这个代码:
#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);
}
它return是i
的指针地址。但是我的问题是 return 不在 printf 函数中添加任何其他参数只是 printf("%p")
的行为
printf("%p");
未定义。当您在格式字符串中指定 %p
格式时,void *
(或 char *
)类型的相应参数应出现在参数列表中。
垃圾。 printf
使用 variable-length 参数列表。它使用格式字符串来确定您实际传递了多少个参数。如果你实际上没有传递任何东西,它仍然会从基本上任意的内存部分读取,就好像你传递了一样。结果是 undefined/trash.
一些编译器能够通过警告捕获这种情况,因为 printf
系列函数非常流行。如果该函数试图从您无权访问的内存中读取,则在某些情况下可能会使您的系统崩溃。就算你得到了某个结果,也无法预知下一次它会如何表现。
But my question is what does it return when not adding any other argument in the printf function just printf("%p");
任何东西。没有什么。随机垃圾。也许它崩溃了。
如果不调查编译器、CPU、平台、库、执行环境等的特定组合,就无法知道。没有规则要求它以任何特定方式运行。
我有这个代码:
#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);
}
它return是i
的指针地址。但是我的问题是 return 不在 printf 函数中添加任何其他参数只是 printf("%p")
printf("%p");
未定义。当您在格式字符串中指定 %p
格式时,void *
(或 char *
)类型的相应参数应出现在参数列表中。
垃圾。 printf
使用 variable-length 参数列表。它使用格式字符串来确定您实际传递了多少个参数。如果你实际上没有传递任何东西,它仍然会从基本上任意的内存部分读取,就好像你传递了一样。结果是 undefined/trash.
一些编译器能够通过警告捕获这种情况,因为 printf
系列函数非常流行。如果该函数试图从您无权访问的内存中读取,则在某些情况下可能会使您的系统崩溃。就算你得到了某个结果,也无法预知下一次它会如何表现。
But my question is what does it return when not adding any other argument in the printf function just printf("%p");
任何东西。没有什么。随机垃圾。也许它崩溃了。
如果不调查编译器、CPU、平台、库、执行环境等的特定组合,就无法知道。没有规则要求它以任何特定方式运行。