c - 将结构的大小作为 void 传递给函数

标签 c pointers struct sybase

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

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

0x000010              0x000042
[int|char[30]|int|int][int]

所以大小是 32,因为 0x00042-0x000010 是 32。

有没有办法知道我什么时候离开结构。

函数的原型(prototype)是

int getData(char* fields, void* myStruct)

我需要找出结构大小。

抱歉,如果我遗漏了一些信息,代码非常庞大,不幸的是我无法在此处发布。

最佳答案

不,一般来说,给定一个 void * 是没有办法弄清楚你在找什么的。您唯一可以做的就是将它与 NULL 进行比较,当然这在这里没有帮助。

请注意,void * 中没有任何内容甚至说它指向一个 struct,它也可能指向一个数组的中间。

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

关于c - 将结构的大小作为 void 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11016578/

相关文章:

c - 任何人都可以向我解释以下内容

c++ - 分配的结构包含 vector 的内存泄漏

c - 如何在 ANSI C 中对字符串结构数组使用快速排序

c - 只是无法理解指针

c++ - 操作数据成员 (C++)

c - 将结构的两个成员相加

c++ - float : Disable specific exception

c++ - rtw_android.c 错误 : implicit declaration of function ‘strnicmp’ [-Werror=implicit-function-declaration]

c - 共享内存段中的链表

c - 具有命名参数的函数指针?