这个程序的输出是什么?

Vij*_*jay 0 c c++ unix linux

当我试图在一个简单的c文件中运行编译并执行此语句时:

main(){ printf("%d");}
Run Code Online (Sandbox Code Playgroud)

在HP上,它给了我64,在AIX上它给了我804359524.

谁能告诉我这是什么行为.

dcw*_*dcw 21

我猜你的意思是:

int main()
{
  printf("%d");
}
Run Code Online (Sandbox Code Playgroud)

既然如此,printf()正在从堆栈中读取一个int(由格式说明符%d指示).由于你没有指定一个,它只是读取堆栈中的任何内容并使用它.因此,您看到伪随机输出.

相反,尝试:

int main()
{
  printf("%d", 10101);
}
Run Code Online (Sandbox Code Playgroud)

HTH


unw*_*ind 12

这是经典的未定义行为.编译器不会检查您是否提供了足够的参数来匹配您的格式化字符串.有编译器这样做(gcc是一个),但你的没有.

代码printf()将愉快地逐步执行其给定的格式化字符串,当它到达"%d"时,它将读取一个int大小的参数(通常是:来自堆栈),不知道那里没有参数可供读取.

无论在堆栈上发生什么值都会被打印出来.