2013-02-10 83 views
-3

在一个函数传递一个INT当我得到不正确的结果:C在函数中传递一个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

第二次 测试1打印:2684032和 测试2打印:50;

他们都应该打印50

我已经测试了struct1的值[1]。首先是50它在功能上招用前。

有没有人知道为什么会发生这种情况?用C的功能

+0

请提供**实际[SSCCE](http://sscce.org)。** – 2013-02-10 03:56:00

+1

您的变量名称令人沮丧。 – 2013-02-10 03:56:32

+1

'Duur [hurr] .derp = 50'? **真**? – meagar 2013-02-10 03:59:19

回答

1

未初始化的值不为0,他们只是垃圾什么记忆了在那个特定的时刻..

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

这应该验证这个想法...

希望我解释这个问题正确。

+0

你在说哪个变量? – paxdiablo 2013-02-10 04:01:58

+0

嗯,我无法理解这个问题,但是//Duur [hurr].derp = 50是评论我们的,所以我认为奇数值是由于它从未被初始化。所以我认为Test1会打印:2684032. lvl IS INITIALIZED,但是它会重新初始化为lvl = Duur [hurr] .derp,它不是初始化的,或者至少我们不知道它初始化的是什么。这个问题在这个结构中很明显。至少我认为杜尔是一个结构... – Dmitry 2013-02-10 04:02:39

+0

我的问题是,这两个lvl变量设置为durr [hurr] .depp。即使它没有初始化,它也不可能同时是两个值:-) – paxdiablo 2013-02-10 04:08:00

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)。由于未初始化的变量,您正在观察不正确的值。

+0

WTH?当u_lvl/lvl1没有被使用时,这将如何解决uninit变量问题? – paxdiablo 2013-02-10 04:05:08

+0

在前面粘贴的代码段中,'lvl2'是要传递的变量的名称以及函数参数。因此,为了保持相似的外观和感觉,我建议将'u_lvl'重命名为'lvl',因为这是用来在'recruit'函数内部打印的 – Ganesh 2013-02-10 04:08:45

相关问题