C 获取结构';s大小作为void传递给函数

C 获取结构';s大小作为void传递给函数,c,pointers,struct,sybase,C,Pointers,Struct,Sybase,我正在更改数据库库中的一些代码。它的工作方式是发送一个void指针,为了得到它的大小,我调用一个查询,并使用该查询计算结构的大小。现在的问题是,我将结构作为params接收,但函数在第一次获取之前/期间失败。之后,我需要清理结构,但我甚至没有大小。 我知道最好的方法是将结构的大小作为参数发送,但是我已经编译了成千上万个程序,这个库是1996年的,所以我需要找到一种方法来计算结构大小,即使类型是空的 我的一个想法是计算不在结构中的下一个元素的位置 0x000010 0x0

我正在更改数据库库中的一些代码。它的工作方式是发送一个void指针,为了得到它的大小,我调用一个查询,并使用该查询计算结构的大小。现在的问题是,我将结构作为params接收,但函数在第一次获取之前/期间失败。之后,我需要清理结构,但我甚至没有大小。 我知道最好的方法是将结构的大小作为参数发送,但是我已经编译了成千上万个程序,这个库是1996年的,所以我需要找到一种方法来计算结构大小,即使类型是空的

我的一个想法是计算不在结构中的下一个元素的位置

0x000010              0x000042
[int|char[30]|int|int][int]
所以大小是32,因为0x00042-0x000010是32

有没有办法知道我什么时候离开这个建筑

该函数的原型是

int getData(char* fields, void* myStruct)
我需要找出结构尺寸


抱歉,如果我错过了一些信息,代码太大了,不幸的是我不能在这里发布它。

不,一般来说,如果
无效*
,就没有办法知道你在找什么。您唯一能做的就是将它与
NULL
进行比较,这当然在这里没有帮助

请注意,
void*
中没有任何内容甚至表示它指向一个
结构体,它也可以指向数组的中间


如果在指针被传递到
getData()
之前,您有一些记录指针的全局方法,那么您可能能够实现一个查找函数,该函数只需将指针值与以前记录的指针值进行比较,但这只是将指针值用作键。

不,一般来说,如果
无效*
,就没有办法了,弄清楚你在找什么。您唯一能做的就是将它与
NULL
进行比较,这当然在这里没有帮助

请注意,
void*
中没有任何内容甚至表示它指向一个
结构体,它也可以指向数组的中间


如果在指针被传递到
getData()
之前,您有一些记录指针的全局方法,那么您可能能够实现一个查找函数,该函数只需将指针值与以前记录的指针值进行比较,但这只是将指针值用作键。

您是否将myStruct转换为某种结构类型?如果是这样的话,您可以只使用该结构的大小吗?什么是
0x000010 0x000042[int | char[30]| int | int][int]
?顺便说一句,“0x00042-0x000010”是*0x*32。你知道结构布局吗?是否大小可变,取决于第一个int字段?顺便说一句:大小0x32(50十进制)不是很可能,因为整数需要在4字节边界上对齐(假设4字节整数等)。地址只是为了说明问题,它们不真实。您是否将myStruct转换为某种结构类型?如果是这样的话,您可以只使用该结构的大小吗?什么是
0x000010 0x000042[int | char[30]| int | int][int]
?顺便说一句,“0x00042-0x000010”是*0x*32。你知道结构布局吗?是否大小可变,取决于第一个int字段?顺便说一句:大小0x32(50十进制)不是很可能,因为整数需要在4字节边界上对齐(假设4字节整数等)。地址只是为了说明问题,它们不是真实的。
void*
的主要缺点是它实际上意味着根本没有类型信息……是的,
void*
的主要缺点是它字面上意味着根本没有类型信息。。。