2013-11-21 56 views
-3

它不是讓所有的陣列0和我找不到原因的幫助,請在 的arr_temp2最後一個數字是垃圾,但在一個之前,它是0,但我在倒數27不能復位陣列0

big=10 small=7 我只能使用基本功能(如果同時)

int arr_temp[big_size+small_size]; 
int arr_temp1[(big_size+small_size+2)]; 
int arr_temp2[(big_size+small_size+1)]; 

for (j=0; j<big_size+small_size; j++) 
{ 
    arr_temp[j]=0; 
} 

    for (t=0;t<(sizeof(arr_temp1)/sizeof(int));++t) 
    { 
    arr_temp1[t]=0; 
    } 


for (z=0;z<(sizeof(arr_temp2)/sizeof(int)); ++z) 
{ 
    arr_temp2[z]=0; 
} 
+0

我把顯示的代碼粘貼到骨架程序中,運行它,並在第三個循環終止後檢查調試器中的數組。所有三個都被正確填滿了零。您的問題不在顯示的代碼中。 – zwol

回答

3

您可能需要使用memset代替:

memset(arr_temp1, 0, sizeof(arr_temp1)); 

或者如果傳遞數組的函數,因此它已經衰減的指針:

memset(arr_temp1, 0, sizeof(arr_temp1[0]) * (big_size+small_size+2)); 
+0

我不能使用memset,但任何方式:) – user3010770

3

爲了初始化數組的所有元素 0你可以做到簡單地作爲

int arr_temp[big_size+small_size] = {0}; 
int arr_temp1[(big_size+small_size+2)] = {0}; 
int arr_temp2[(big_size+small_size+1)] = {0}; 

請注意,我推測您在聲明這些數組(這是VLA的必需條件)之前已經初始化了可變長度數組(在C99中允許)和big_sizesmall_size

我以前的答案是錯誤的。 VLA不能以這種方式進行初始化。

你是對的。沒有問題。我用代碼

#include<stdio.h> 

int main() 
{ 
int big_size = 4; 
    int small_size = 2; 

    int arr_temp[big_size+small_size]; 
    int arr_temp1[(big_size+small_size+2)]; 
    int arr_temp2[(big_size+small_size+1)]; 

    for (int j=0; j < big_size+small_size; j++) 
    { 
     arr_temp[j]=0; 
     printf("%d", arr_temp[j]); 
    } 
    printf("\n\n"); 

    for (int t=0; t < (signed)(sizeof(arr_temp1)/sizeof(int)); ++t) 
    { 
     arr_temp1[t]=0; 
     printf("%d", arr_temp1[t]); 
    } 
    printf("\n\n"); 

    for (int z=0;z<(signed)(sizeof(arr_temp2)/sizeof(int)); ++z) 
    { 
     arr_temp2[z]=0; 
     printf("%d", arr_temp2[z]); 
    } 
    return 0; 
} 

和獲取

000000 

00000000 

0000000 

我澆鑄sizeof操作者unsigned輸出,因爲它返回size_t(無符號)型進行了測試。比較signed和無符號類型可能很危險。

+0

謝謝我,我的事情我找出我的雜誌是 – user3010770

+0

我不明白你在說什麼。你能改述你的話嗎? – haccks

+0

我認爲變長數組不應該初始化指定。 – BLUEPIXY