2012-09-25 37 views
2
void sizeof_test2(); 

void sizeof_test2() 
{ 
    int array[5]; 
    size_t arr_size = sizeof(array); 

    printf("sizeof:\n" 
      "array = %d\n" 
      "arr_size = %d\n", sizeof(array), sizeof(arr_size)); 
} 

GCC編譯器輸出:問題理解爲size_t類型和sizeof操作符

sizeof_test2.c: In function `sizeof_test2': 
sizeof_test2.c:6: error: `size_t' undeclared (first use in this function) 
sizeof_test2.c:6: error: (Each undeclared identifier is<br> 
reported only once sizeof_test2.c:6: error: for each function it<br> 
appears in.) sizeof_test2.c:6: error: parse error before "arr_size"<br> 
sizeof_test2.c:10: error: `arr_size' undeclared (first use in this<br> 
function) make[2]: [build/Debug/Cygwin-Windows/sizeof_test2.o]<br> 
Error 1 make[1]: [.build-conf] Error 2<br> 

不知道爲什麼我得到這個錯誤,什麼是通過printf顯示爲size_t類型的正確方法是什麼?

+0

'size_t'在'stdlib.h'定義的(我認爲),因爲你得到未聲明的錯誤。 – slugonamission

+0

添加了:#include 問題得到了解決..應該想到的是,我沒有通過NetBeans導航到頭,但沒有想到實際包括它..謝謝。 –

+0

就是這樣。 'stdlib.h'把它引入我認爲,因此我迷惑。 – slugonamission

回答

4

size_t類型在stddef.h標題(和其他標題,例如stdio.h)中定義。

請注意,在您的程序中,您正在使用printf函數,因此您必須包含stdio.h

+0

是的,我只是把它包括在內......謝謝並且對我的新手抱歉錯誤。 –

1

size_t不是C中的內置類型。您必須包含<stddef.h><stdlib.h>標準標頭,其中定義了size_t

+0

是的,這就是我所做的。 –

3

STDLIB是你想要的,並顯示它我認爲你正在尋找的%z修改

#include <stdlib.h> 

size_t arr_size; 
printf("%zu\n", arr_size); // unsigned decimal 
printf("%zx\n", arr_size); // hex 
+0

這就是我所做的,'%d'格式的代碼修飾符也可以。 –

+1

@ user38541 - 但請記住,%d或%u可能無法在32位和64位計算機上正確編譯。在C99中爲%Z添加了這個功能 – Mike

+0

好的,謝謝,我會牢記這一點。 –