2014-03-27 84 views
0

到目前爲止,我已經寫了幾行將整數轉換爲數組。將整數轉換爲數組

#include <stdio.h> 

int main(int argc, char *argv[]){ 
    int num = 9214; 
    int count = 3; 
    char numarray[3]; 
    int temp; 

    while(num > 0){ 
     temp = num % 10; 
     numarray[count] = temp; 
     num /= 10; 
     count--; 
    } 

    printf("Array: "); 
    for(count = 0; count <= 3; count++) 
    printf("%d", numarray[count]); 
    printf("\n\n"); 
} 

輸出應該是9214.然而,返回爲9219 如果我改變變量NUM 5183,它將返回爲5185 它改變了數組的最後一個號到num的第一個數字變量。

有沒有人有任何想法,我已經搞砸了?

回答

4
char numarray[3]; 

該陣列具有3個元素,而不是4。

for(count = 0; count <= 3; count++) 
    printf("%d", numarray[count]); 

printf的訪問聲明的元件陣列的外側(numarray[3]但最後一個元素是numarray[2])。在while循環中與numarray[count] = temp;相同。

要解決您的問題,請將char numarray[3];更改爲char numarray[4];

+0

我覺得有點愚蠢,因爲我試圖增加幾乎所有東西的大小,除此之外。我可以問爲什麼它將最後一位數字變爲變量中的第一位數字? – Jack

+0

嘗試更多示例,然後才能斷定它將最後一位數字變爲變量中的第一位數字。你正在走出界限。 – innoSPG

0

numarray太小了。

應該

char numarray[4]; 

你while循環數組和你的printf進行循環之外重寫存儲器陣列之外尋找記憶。

+0

我原來的想法是,因爲我有四個數字,我只需要numarray [3],因爲它從0開始計數。是否因爲需要空終止符而爲4? – Jack

+0

不,它是4,因爲你有4個數字。指數是0-3,這給你4個指數。 – jmstoker

0

該數字有4位數字,但是您正在分配一個大小爲3的數組。分配到numarray[3]是無效的,因爲它是未定義的行爲,因此使用該表達式來訪問該值。

當聲明的陣列方括號之間的數指定該陣列可以保留和的最大索引值元素的最大數量。訪問是基於零,因此在一個int nums[4];陣列可能的索引值是0,1,2和3

通常爲type arr[n]任何陣列,其中type是一個有效的類型和n是文字數,有效的索引值從0n - 1