-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 に答える