繁体   English   中英

有人能解释一下为什么当“字符串”与“%d” fromat 说明符一起使用时,它会给出奇怪的 output

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM