2011-11-25 56 views
4

即時通訊嘗試獲取sizeof char數組變量在一個不同的函數初始化,但不能得到正確的sizeof。請參閱下面的代碼找到sizeof字符數組C++

int foo(uint8 *buffer){ 
cout <<"sizeof: "<< sizeof(buffer) <<endl; 
} 
int main() 
{ 
uint8 txbuffer[13]={0}; 
uint8 uibuffer[4] = "abc"; 
uint8 rxbuffer[4] = "def"; 
uint8 l[2]="g"; 
int index = 1; 

foo(txbuffer); 
cout <<"sizeof after foo(): " <<sizeof(txbuffer) <<endl; 
return 0; 
} 

輸出爲:

sizeof: 4 
sizeof after foo(): 13 

所需的輸出是:

sizeof: 13 
sizeof after foo(): 13 

回答

5

你不能。在foo中,你要求的是「uint8_t指針」的大小。如果您在foo中需要,請將尺寸作爲單獨的參數傳遞。

14

這不能單用指針來完成。指針不包含有關數組大小的信息 - 它們只是一個內存地址。由於數組在傳遞給函數時衰減爲指針,因此會丟失數組的大小。然而

一種方法是使用模板:

template <typename T, size_t N> 
size_t foo(const T (&buffer)[N]) 
{ 
    cout << "size: " << N << endl; 
    return N; 
} 

然後,您可以調用函數這樣的(就像任何其他功能):

int main() 
{ 
    char a[42]; 
    int b[100]; 
    short c[77]; 

    foo(a); 
    foo(b); 
    foo(c); 
} 

輸出:

size: 42 
size: 100 
size: 77 
+0

+1。正是我在想什麼。 –

+0

@Marlon即時通訊新的模板在C++中,所以我應該如何調用函數foo ?,一個例子將不勝感激。 –

+0

@ user945511我編輯了我的答案。 – Marlon

1

一些模板魔法:

template<typename T, size_t size> 
size_t getSize(T (& const)[ size ]) 
{ 
    std::cout << "Size: " << size << "\n"; 
    return size; 
}