C语言中指针对指针的赋值

C语言中指针对指针的赋值,c,pointers,C,Pointers,我有一个存储我所需数据的数据结构。 我需要得到数据结构字段内存上的指针 OAL_ErrorCode read_lwm2m_resource_str(lwm2m_context_t * lwm2mH, lwm2m_uri_t uri, char* dataToReturn) { lwm2m_data_t dataArray = {.id = uri

我有一个存储我所需数据的数据结构。 我需要得到数据结构字段内存上的指针

OAL_ErrorCode read_lwm2m_resource_str(lwm2m_context_t * lwm2mH,
                                      lwm2m_uri_t uri,
                                      char* dataToReturn)
{
lwm2m_data_t dataArray = {.id = uri.resourceId};
lwm2m_data_t* dataArrayPtr = &dataArray;
OAL_ErrorCode res;

res = _get_lwm2m_data_array(lwm2mH, uri, dataArrayPtr);
if (res != NO_ERROR)
{
    return res;
}

dataToReturn = (char*)dataArrayPtr->value.asBuffer.buffer;

return NO_ERROR;
}

当我在调试模式下运行程序并将断点放在read_lwm2m_resource_str()中的return NO_ERROR上时,dataToReturn指向正确的内容,但在read_lwm2m_resource_str()完成后,strBuf中有垃圾并指向不同的内存位置。 什么是错误的以及如何使其工作


p.slwm2m数据

struct _lwm2m_data_t
{
lwm2m_data_type_t type;
uint16_t    id;
union
{
    bool        asBoolean;
    int64_t     asInteger;
    uint64_t    asUnsigned;
    double      asFloat;
    struct
    {
        size_t    length;
        uint8_t * buffer;
    } asBuffer;
    struct
    {
        size_t         count;
        lwm2m_data_t * array;
    } asChildren;
    struct
    {
        uint16_t objectId;
        uint16_t objectInstanceId;
    } asObjLink;
} value;
};

您需要将指针传递给指针:
char**dataToReturn
以修改原始指针。
void f(int i){i=5;}int main(){int x=7;f(x);printf(“%d\n”,x);}
struct _lwm2m_data_t
{
lwm2m_data_type_t type;
uint16_t    id;
union
{
    bool        asBoolean;
    int64_t     asInteger;
    uint64_t    asUnsigned;
    double      asFloat;
    struct
    {
        size_t    length;
        uint8_t * buffer;
    } asBuffer;
    struct
    {
        size_t         count;
        lwm2m_data_t * array;
    } asChildren;
    struct
    {
        uint16_t objectId;
        uint16_t objectInstanceId;
    } asObjLink;
} value;
};