找到sizeof字符数组C++

问题描述:

即时通讯尝试获取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 

你不能。在foo中,你要求的是“uint8_t指针”的大小。如果您在foo中需要,请将尺寸作为单独的参数传递。

这不能单用指针来完成。指针不包含有关数组大小的信息 - 它们只是一个内存地址。由于数组在传递给函数时衰减为指针,因此会丢失数组的大小。然而

一种方法是使用模板:

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

一些模板魔法:

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