繁体   English   中英

find sizeof char数组C ++

[英]find sizeof char array C++

我试图在其初始化的不同函数中获取sizeof char数组变量但是无法获得正确的sizeof。 请看下面的代码

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

仅使用指针无法完成此操作。 指针不包含有关数组大小的信息 - 它们只是一个内存地址。 因为数组在传递给函数时会衰减为指针,所以会丢失数组的大小。

然而,一种方法是使用模板:

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

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

一些模板魔法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM