【问题标题】:Why prinf prints random number? [duplicate]为什么打印机打印随机数? [复制]
【发布时间】:2021-12-15 17:37:54
【问题描述】:

这是我的代码。为什么 C 会打印一个像 3321856 这样的随机数? 我知道这是因为它是一个空变量,但为什么是这个数字?是随机的还是有什么原因的?

#include <stdio.h>

void main()
{
    int a;
    printf("%d", a);
}

【问题讨论】:

  • a 没有被初始化为任何东西,所以它的值是不确定的。
  • 您希望打印什么,为什么?
  • 为什么是这个号码?是随机数吗?
  • 正式地说,它是不确定的。在实践中,它可能是某个先前操作留下的寄存器或内存位置的内容。预测它的价值可能难,也可能不难,这取决于你对程序的了解程度以及它是如何编译的。在任何有用的概率意义上,它肯定不是随机的。

标签: c integer initialization printf undefined-behavior


【解决方案1】:

首先,根据 C 标准,不带参数的函数 main 应声明如下。

int main( void )

其次,变量a没有初始化,具有不确定的值,所以程序调用了未定义的行为。

您需要在输出该值之前使用一个值初始化变量a,否则输出将是未定义的。

变量a 定义在函数main 的外部块范围内,没有存储类说明符static。因此它具有自动存储期限。此类变量不会被隐式初始化。

【讨论】:

  • 是随机数吗?
  • @איתמרשיאון 它输出变量 a 占用的内存中的任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 2013-10-24
  • 2020-07-24
相关资源
最近更新 更多