我正在学习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如何获得正确的值?
由于
答案 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()
?
哦,是的,忘记提及你需要初始化第二个数组,正如已经指出的那样。