0

我目前正在修改转储程序,但我无法弄清楚如何使用 void 指针正确导航。下面是我正在使用的功能,以及我正在尝试执行的指令。我尝试将 mem 转换为结构,但我不确定 sytnax 并且我不断收到错误消息。对于下面的代码,我得到的具体错误是:

       47       |   mem = mem->tcbtio                                    
===========> .........a..............................................
*=ERROR===========> a - CCN3122 Expecting pointer to struct or union.

这是我的功能:

void hexdump(void *mem, unsigned int len)
{                                        
   mem = mem->tcbtio;                     
   ...
}  

这是我的结构定义:

struct psa {           
 char psastuff[540];   
 struct tcb *psatold;  
        char filler[4];
 struct ascb *psaaold; 

};                     

struct tcb {           
 struct prb *tcbrb;    
 char tcbstuff[8];     
 struct tiot *tcbtio;  
};           

struct tiot {     
 char tiocnjob[8];
 char tiocpstn[8];
 char tiocjstn[8];
};

我需要将其保留为 void 指针,因为稍后我需要在函数中将其转换为 char 和 int 。

4

2 回答 2

3

似乎您期望找到一个tcb结构,从 mem 指向的地址开始,但代码的目的是模糊的,问题也不清楚。

如果真的是这样,你可以试试这个:

   mem = ((struct tcb *)mem)->tcbtio;                     
于 2014-03-27T04:45:13.070 回答
0

您不能取消引用void指针。如果你有一个指针,你可以这样想void,编译器如何知道它持有什么类型的地址。并且通过做mem = mem->tcbtio多少抵消它必须做。

将您的功能修改为:

void hexdump(void *mem, unsigned int len)
{
   struct tcbtio *mem2;
   mem2 = ((struct tcb*) mem) -> tcbtio;
   ...
   // Use mem2 later
}
于 2014-03-27T05:11:22.020 回答