2010-01-12 81 views
0

我正在学习C语言,而且我正面临一个我自己无法解决的问题。 我有一个简单的循环,我在每个单词中添加了所有字符的ascii值。C和字符。奇怪的行为

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如何获得正确的值?

谢谢

+0

你可以举一个这些“大数字”的例子吗? – 2010-01-12 02:26:22

+0

你究竟看到了什么,你期望什么? – stefanB 2010-01-12 02:26:55

+0

数组错误的元素?你在看他们吗?如果数字错误,你如何得到正确的答案? 另外,你是否打算为空间增加价值? – freespace 2010-01-12 02:29:22

回答

4

您还没有初始化lexicographical_values数组。您可以通过执行初始化:

int lexicographical_values[20] = {}; 

每当你看到大数输出,检查未初始化的变量。

+0

特别大的负数你没想到 – Draemon 2010-01-12 02:41:04

+0

由于一个单词的总数不应该是一个负值,也许lexicographical_values应该是一个无符号整数的数组而不是整数 – Trent 2010-01-12 02:57:45

+0

非常感谢。这工作!我想知道数组初始化,但不相信一个循环将是一个优雅的解决方案。 – iBiryukov 2010-01-12 03:00:29

2

您从未初始化的内存开始。

man memset 
0

你还没有初始化char_array的任何东西,所以很可能它有垃圾(取决于编译器选项和平台),所以,你做了一个strlen(char_array),在这一点上,我们不知道我们将要出去什么的。如果用0初始化(如:char char_array[100] = {0};然后strlen将返回0,你永远不会进入循环

也许你正在寻找sizeof()这里

哦,对了,忘了提,你呢?需要初始化第二个数组也是如已经指出的那样