-2

像下面的代码:

#include <iostream>
#include <string>

#define BUF_LEN_HEAP 32
#define BUF_LEN_STACK 64

int getBufLen(const char *buf)
{
    //...
}

void foo(const char *buf)
{
    int len = getBufLen(buf);
    //memcpy(new_buf, buf, len);
    //...
}

int main()
{
    char buf_stack[BUF_LEN_STACK];
    char *buf_heap = new char[BUF_LEN_HEAP];
    std::string str("abcdef");

    foo(buf_stack);
    foo(buf_heap);
    foo(str.c_str());

    delete [] buf_heap;

    return 0;
}

如果获取缓冲区的长度很难将参数传递给函数。

无论在堆栈或堆上分配的缓冲区是否有较低级别的方法来获取缓冲区的长度?

4

1 回答 1

2

不,没有办法在声明它的方法之外获取数组的大小,只有当数组声明为静态长度(在编译时已知)时。

处理此问题的常用方法是将指针和大小都传递给写入缓冲区的任何函数,就像这样memcpy做一样。

std::vector使用 c++,使用 a而不是普通数组总是更好的选择。std::vector在一个易于传递的对象中携带所有需要的信息。

于 2013-11-15T06:54:50.850 回答