C ints和chars。奇怪的行为

时间:2010-01-12 02:24:08

标签: c

我正在学习C语言,我遇到的问题似乎无法自行解决。 我有一个简单的循环,我在每个单词中添加所有字符的ascii值。

    char char_array[100];
    int lexicographical_values[20];
    int i, j = 0;
    for( i = 0; i <strlen(char_array); i++) {
          if(char_array[i] == ' ') 
              j++;
          lexicographical_values[j] += (int)char_array[i];   
    }

然后,如果我在循环中输出lexicographical_values数组

  printf("%d word is: %d \n", i, lexicographical_values[i]);

我得到每个单词的正确数字(例如:dd = 200等等)

但是,如果我实际看到数组中每个元素的值,我会得到远远不正确的大数字。

问题是,我如何获得正确的值以及printf如何获得正确的值?

由于

3 个答案:

答案 0 :(得分:4)

您尚未初始化lexicographical_values数组。您可以通过执行以下操作来初始化它:

int lexicographical_values[20] = {};

每次在输出中看到大数时,请检查未初始化的变量。

答案 1 :(得分:2)

你是从未初始化的内存开始的。

man memset

答案 2 :(得分:0)

你没有用任何东西初始化char_array,所以很可能它有垃圾(取决于编译器选项和平台)所以,你做strlen(char_array),此时我们不确定我们要做什么摆脱它。如果用0初始化它(例如:char char_array[100] = {0};,那么strlen将返回0并且您永远不会进入循环。

也许你在这里寻找sizeof()

哦,是的,忘记提及你需要初始化第二个数组,正如已经指出的那样。