[英]can someone explain me why when a “string” is used with the “%d” fromat specifier it gives strange output
这是程序:
#include <stdio.h>
main()
{
printf("%d", "A"); // Can i know what the output from "printf" even means why the output is so strange
} // this outputs: "4214884" in my compiler
如您所见,output 太奇怪了,你们中的任何人都可以向我解释一下。 这是未定义的行为吗? 这种行为在C 标准中的任何地方都有描述,所以我可以阅读它
是的,这是未定义的行为。 %d
期望参数是 integer,这里你传递的是字符串文字的第一个元素的地址,它是一个指针类型。
根据C11
,第 7.21.6.1/P9 章
[...]如果任何参数不是相应转换规范的正确类型,则行为未定义。
也就是说,对于托管环境, main()
应该是int main(void)
。
如果要打印带有%d
说明符的字符,请在字符周围加上单引号,而不是双引号。
printf("%d", 'A');
这将打印 65,即 A 的 ASCII 值。
如果您在双引号中放入任何将被解释为string literal
的内容。 所以,它有两个字符(在你的情况下),一个是'A'
,第二个是'\0'
字符,你用%d
说明符打印它,这将完全产生undefined behaviour
。 这将在不同的编译器和 IDE 上显示不同的结果。
如果要打印"A"
,我的意思是使用双引号,请改用%s
标识符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.