-9

我决定重写我正在做的事情,回到基础:

#include <stdio.h>

int main () {

  int a;
  int b;
  int c;
  int d;
  printf("ta-dah: %i %i %i %i\n", a, b, c, d);

  return 0;
}

我调用它me.c,然后编译它gcc me.c并使用./a.out.

结果我得到了这个:

hc$ ./a.out 
ta-dah: 32767 1477090280 0 0

这是一个非常简单的程序,我不确定错误在哪里。有什么建议么?

4

3 回答 3

4

您不初始化这些值,因此它会打印垃圾值(无论何时在(内存)时空中的堆栈内存上发生的任何事情。

如果您希望能够从中读取,您应该首先初始化它们。

int a = 3; 
int b = 42;
int c = 1337;
int d = 0;

例子

于 2013-01-18T02:11:45.607 回答
2

非静态变量(局部变量)是不确定的。在赋值之前读取它们会导致未定义的行为。

要么初始化变量:

#include <stdio.h>

int main () {

  int a = 1;
  int b = 2;
  int c = 3;
  int d = 4;
  printf("ta-dah: %i %i %i %i\n", a, b, c, d);

  return 0;
}

输出:ta-dah: 1 2 3 4

或将它们设置为静态:

#include <stdio.h>

int main () {

  static int a;
  static int b;
  static int c;
  static int d;
  printf("ta-dah: %i %i %i %i\n", a, b, c, d);

  return 0;
}

输出:ta-dah: 0 0 0 0

于 2013-01-18T02:29:01.527 回答
1

除非您使用值初始化变量,否则您将看到任何值恰好位于用于存储变量值的内存地址。

将其更改为:

#include <stdio.h>

int main () {

  int a = 1;
  int b = 2;
  int c = 3;
  int d = 4;

  printf("ta-dah: %i %i %i %i\n", a, b, c, d);

  return 0;
}

你会得到:

ta-dah: 1 2 3 4
于 2013-01-18T02:12:32.710 回答