2010-01-12 80 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()這裏

哦,對了,忘了提,你呢?需要初始化第二個數組也是如已經指出的那樣