<分区>
在一次采访中,我被问及以下代码片段的输出:
printf("%d", "computer");
我是一个c#开发者,之前也学过C,但是被问到这个问题的时候,我是一头雾水。 当我在 Windows 10 计算机(64 位)中运行相同的问题时,它给出了 putput as
3571712
请说明发生这种情况的原因。
<分区>
在一次采访中,我被问及以下代码片段的输出:
printf("%d", "computer");
我是一个c#开发者,之前也学过C,但是被问到这个问题的时候,我是一头雾水。 当我在 Windows 10 计算机(64 位)中运行相同的问题时,它给出了 putput as
3571712
请说明发生这种情况的原因。
最佳答案
它“不起作用”,您观察到的是 undefined behavior 的结果.
引用 C11
,章节 §7.21.6.1/p9
[...] If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.
在您的例子中,转换说明符是 %d
,它需要一个 int
类型的参数,但您提供的是 char*
,并且它们不是兼容类型,因此是 UB。
关于c - 当格式说明符不正确时,printf 函数如何在 c 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42780043/