将struct的大小作为void传递给函数

Lef*_*ler 0 c sybase struct pointers

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

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

0x000010              0x000042
[int|char[30]|int|int][int]
Run Code Online (Sandbox Code Playgroud)

因此大小为32,因为0x00042-0x000010是32.

有没有办法知道我什么时候离开了这个结构.

功能的原型是

int getData(char* fields, void* myStruct)
Run Code Online (Sandbox Code Playgroud)

我需要找出结构尺寸.

对不起,如果我错过了一些信息,代码是巨大的,不幸的是我不能在这里发布.

unw*_*ind 5

不,一般来说,没有办法,只要一个void *,弄清楚你在追求什么.你唯一能做的就是比较它NULL,这当然对这里没有帮助.

请注意,void *即使它指向a struct,也没有任何内容,它也可以指向数组的中间.

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