#include <stdio.h>
int main() {
int i=10,j=20;
printf("%d%d%d",i,j);
printf("%d",i,j);
return 0;
}
使用 Turbo C 编译器,输出如下:
10 10 垃圾值 20
有人可以解释这是为什么吗?
#include <stdio.h>
int main() {
int i=10,j=20;
printf("%d%d%d",i,j);
printf("%d",i,j);
return 0;
}
使用 Turbo C 编译器,输出如下:
10 10 垃圾值 20
有人可以解释这是为什么吗?
行为是undefined,这意味着语言规范没有说明在这种情况下会发生什么。这完全取决于编译器的实现和您的系统架构。解释未定义的行为有时会很有趣,经常令人抓狂,而且几乎总是无用的——所以不要担心!
第一次调用printf()
有一个太多的格式说明符,导致未定义的行为。在这种情况下,会打印一个垃圾值。
printf("%d%d%d",i,j); =>
你告诉 printf 打印三个整数,但你只提供了三个,所以 printf 从堆栈中打印一些垃圾。另一个:
printf("%d",i,j);
应该只取一个整数,但你传递了两个。C 语言无法防范此类错误,并且发生的情况完全未定义,因此除非您知道编译器内部,否则很难解释您如何准确看到这些输出,并且由于该代码错误并且预计会失败,因此没有那么有用。
你把你的格式说明符都弄混了,我不认为你发布的代码是你的实际代码。在我的 Visual Studio 编译器上,我看到了这个:
1020010
每个都%d
表示printf
应该插入一个整数值的地方。
printf("%d%d%d",i,j);
你告诉printf
期待三个,但你只给了它两个。Turbo C 可能在后台对参数做一些不同的事情,但您仍然需要将格式说明符与您的参数相匹配:
printf("%d%d",i,j);