2014-02-19 36 views
0

當我在printf函數中使用sizeof時,它返回的長度,但如果我分配給任何int變量它不會給出數組的長度。程序停止。 下面的代碼:爲什麼sizeof不給出數組的長度?

int main(void) { 
    int a[] = {1, 3, 5, 6, 23, 55, 93, 923, 112, 33, 5, 23}; 
    int len = sizeof(a)/sizeof(a[0]); // It return anonymous integer 
    int len2 = sizeof(a); 
    // mergesort(a, 0, len); // This is an update, because of this, program stops. 
    printf("%d\t%d\n", sizeof(a)/sizeof(a[0]), len); 
    printf("%d", len2); // The program stops when using this. 
} 

更新:夥計們,遺憾的問題。這是我的錯誤。它工作正常,因爲我正在使用mergesort算法。我認爲這是mergesort中的一個錯誤。

+1

「程序停止」是什麼意思? – herohuyongtao

回答

1

@Acme有一個很好的想法,使用printf()格式說明符%dsize_t值是錯誤的。

在我的Linux amd64系統上,sizeof(int)= 4和sizeof(size_t)= 8。這可能是一個問題。

它似乎對我來說很好(可能在第二個printf()語句令您感到困惑之後缺少換行符),但由於size_t與int格式說明符不匹配,結果未定義。

$ ./size 
12 12 
48$ 
+0

printf中的格式說明符不正確。 – Sadique

相關問題