-3

関数で int を渡すと、正しくない結果が得られます。

int recruit(int var1, int re_unit, char *char_buffer, int var2) {
 int run = 1;
 int int_buffer = 0;
 printf("Test1 %d\n", var1);
 printf("Test2 %d\n", var2);
 ...
}
void some_other_function(structs, struct1[]) {
 int var1 = 0;
 int var2 = 0;
 int re_unit = 0;
 char char_buffer[] = "What ever";

 //strucs[1].first = 50 this is done in a other section

 var1 = strucs1[1].first;
 var2 = strucs1[1].first;


 recruit(var1, re_unit, char_buffer, var2);
  // Ind the full verstion of the program this function is called 2 times:
  // The first time nothing is worng, how ever the second time, the result
  // is as explaned below


  //strucs[2].first = 50 // this is done in a other section
  var1 = struct1[2].first;
  var2 = struct1[2].first;

 recruit(var1, re_unit, char_buffer, var2);

}

int main(void) {
 ...
}

結果は、最初に Test1 が出力: 2684032、および Test2 が出力: 50 です。

2 回目のテスト 1 の印刷: 2684032 およびテスト 2 の印刷: 50。

それらはすべて 50 を出力するはずです。

struct1[1].first の値が 50 であることをテストしてから、関数Recruit で使用します。

これが起こる理由を知っている人はいますか?

4

2 に答える 2

1

C の関数の初期化されていない値は 0 ではなく、その特定の瞬間にメモリが持っていたものはゴミです。

#include <stdio.h>
int main()
{
    int a;
    printf("%i\n", a);
    return 0;
}

それはアイデアを示すはずです...

うまくいけば、私は質問を正しく解釈しました。

于 2013-02-10T03:58:20.697 に答える
0

このステートメントint recruit(int lvl, int re_unit, char *char_buffer, int u_lvl, int lvl2)を に変更してくださいint recruit(int lvl, int re_unit, char *char_buffer, int lvl, int lvl2)。初期化されていない変数が原因で、誤った値が観察されています。

于 2013-02-10T04:03:11.127 に答える