1
#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

有人可以解释这是为什么吗?

4

4 回答 4

2

行为是undefined,这意味着语言规范没有说明在这种情况下会发生什么。这完全取决于编译器的实现和您的系统架构。解释未定义的行为有时会很有趣,经常令人抓狂,而且几乎总是无用的——所以不要担心!

于 2012-06-15T15:50:55.920 回答
2

第一次调用printf()有一个太多的格式说明符,导致未定义的行为。在这种情况下,会打印一个垃圾值。

于 2012-06-15T15:49:48.233 回答
2
printf("%d%d%d",i,j); =>

你告诉 printf 打印三个整数,但你只提供了三个,所以 printf 从堆栈中打印一些垃圾。另一个:

printf("%d",i,j);

应该只取一个整数,但你传递了两个。C 语言无法防范此类错误,并且发生的情况完全未定义,因此除非您知道编译器内部,否则很难解释您如何准确看到这些输出,并且由于该代码错误并且预计会失败,因此没有那么有用。

于 2012-06-15T15:49:52.007 回答
1

你把你的格式说明符都弄混了,我不认为你发布的代码是你的实际代码。在我的 Visual Studio 编译器上,我看到了这个:

1020010

每个都%d表示printf应该插入一个整数值的地方。

printf("%d%d%d",i,j);

你告诉printf期待三个,但你只给了它两个。Turbo C 可能在后台对参数做一些不同的事情,但您仍然需要将格式说明符与您的参数相匹配:

printf("%d%d",i,j);
于 2012-06-15T15:51:22.460 回答