c - 无法将结构传递给结构内的指针

标签 c pointers struct

给定以下定义:

#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;    
};

在主函数中

   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/

相关文章:

c - 递归搜索目录中的文件

c - 处理 CUDA 中指向指针的图像指针

c - 如何从函数中取回指针的指针

c - 初始化结构数组 - C 代码错误

c - 猜单词 : I/O C logic error

c - ncurses:为什么 RGB 颜色值的范围是 0 - 1000?

c - 使用 C,尽可能干净地将动态分配的 int 数组转换为逗号分隔的字符串

c++ - 指向动态容器的指针是否持续存在?

xml - 只定义一个结构并让它在 Go 中处理 XML 文件的所有内部元素?

c - 如何在结构中正确使用指针?