我正在尝试将值分配给函数中的结构成员,该函数接受 void * 作为参数,然后根据为结构成员计算的偏移量填充数据值。
typedef struct
{
char C_BFR_LINK[1];
char C_TABLE_DATA[1];
double MF_COD_BALANCE;
char C_TYPE_DT[1];
}ANS;
功能
void fillin( void *pp)
{
double* FVAR;
char* CVAR;
CVAR = pp;
memcpy(CVAR,"I",1);
CVAR = (void *)(pp + 1);
memcpy(CVAR,"S",1);
FVAR = (void *)(pp + 2);
*FVAR = 234.96;
CVAR = (void *) (pp + 10);
memcpy(CVAR,"Z",1);
return ;
}
负责分别填写偏移量 1、2 和 10 处的值。
我在 main 中调用这个函数,如下
**
int main()
{
void* p ;
ANS ans;
fillin(&ans);
return 0;
}
**
我使用 gdb 进行了调试,在函数fillin中将值分配给成员,但是一旦控件进入主程序,double 值就会丢失并且不正确。
(gdb) p pp
$1 = (void *) 0xffffdabc
(gdb) x /c 0xffffdabc
0xffffdabc: 73 'I'
(gdb) x /c 0xffffdabd
0xffffdabd: 83 'S'
(gdb) n
32 *FVAR = 234.96;
(gdb) n
33 CVAR = (void *) (pp + 10);
(gdb) **x /f 0xffffdabe**
0xffffdabe: 234.96000000000001
57 return 0;
(gdb) **p ans**
$2 = {C_BFR_LINK = "I", C_TABLE_DATA = "S",
**MF_COD_BALANCE = 1.9876540305898699e-268**, C_TYPE_DT = "\213"}
谁能帮我吗?此代码是使用 gcc 4.4.6 20120305 构建的。非常感谢任何指针或帮助。