给出以下定义:

#define arrayLengthInStruct 50

typedef struct {
   int _buf[arrayLengthInStruct];
   int _bufLen;
} list;

// nested struct seems redundant but is there for some specific use
struct dev_req {
    struct {
        struct {
            int src;
        }serviceReq;
    }_req;
};

在main()
   int i=0;

// to pass the memory location
list g_src;                   // data is here
struct dev_req *dev_Areq;     // to be loaded/ transfer to here

   g_src._bufLen = arrayLengthInStruct;
// initialize the source
for (i = 0; i < g_src._bufLen; i++) {
    g_src._buf[i] = i+1;
    printf("%d \t", g_src._buf[i]);
}
printf("\n");

接下来的两条线都失败了
   //dev_Areq->_req.serviceReq.src = malloc(sizeof(g_src));    // failed
   //dev_Areq->_req.serviceReq.src = (list*) &g_src;           // failed

也不清楚下一部分是否可以工作,即使通过前1行。
/*
for (i = 0; i < (dev_Areq->_req.serviceReq.src)->_bufLen; i++) {
    printf("%d \t", (dev_Areq->_req.serviceReq.src)->_buf[i]);
}
printf("\n");
*/

最佳答案

首先,dev_Areq是指针类型,它指向的内存尚未分配。

dev_Areq = (struct dev_req *)malloc(sizeof(struct dev_req ));

只有在这之后,您才能访问它的_req元素。
其次,您希望将src指向一个list类型,并访问其元素,然后应该将src定义为list *类型,而不是int。然后使用这一行将src指向g_src
dev_Areq->_req.serviceReq.src = (list*) &g_src;

关于c - 无法将结构传递给结构内的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21639082/

10-11 22:25
查看更多