a87*_*874 1 c printf format-specifiers
我正在调整printf()函数.因为printf()函数采用格式说明符来识别要打印的数据类型(纠正我,如果我错了)作为参数传递给它的数据类型的值,所以我尝试做这样的事情---
#include<stdio.h>
int main()
{
char *f="%d";
char *g="asd";
printf(f,g);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
o/p是 -
4210739
我无法理解为什么o/p是一个数字?
Sou*_*osh 10
因为,您的代码调用未定义的行为.
您正在尝试使用格式说明符打印字符串%d.您应该使用%s格式说明符.对特定格式(转换)说明符使用错误类型的参数调用UB.
引用C11,第7.21.6.1章
[...]如果任何参数不是相应转换规范的正确类型,则行为未定义.
更改
char *f="%d";
Run Code Online (Sandbox Code Playgroud)
至
char *f="%s";
Run Code Online (Sandbox Code Playgroud)
如前所述,说明%d符指定您将传递一个整数作为第二个参数,而是传递一个指针(*char类型)变量.因此,printf()例程将指针解释为整数并将其打印(实际上是它的值).
要正确输出字符串,您应该使用说明%s符.