给出以下定义:
#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/