我在我的应用程序中使用hsearch library of glibc(C语言,在Fedora 17上)。我发现此网页http://www.gnu.org/software/libc/manual/html_node/Hash-Search-Function.html,其中说hsearch函数要求data
和key
的NULL终止字符串。我知道key
应该以NULL终止,但是我无法理解“ NULL终止数据”是真的正确还是我指的是旧的(或不正确的网页)信息。
我试图理解代码here,但它当然并不表明数据必须以NULL终止。
ENTRY he_entry = {NULL, NULL};
ENTRY *result = NULL;
...
he_entry.key = key;
he_entry.data = data;
...
result = hsearch(he_entry, FIND);
<result->data contains my data>
我想知道是否还有其他人观察到任何类似的行为。
(从侧面说,问题实际上是我能够以某种方式为多个键获取相同的数据(结果->数据),并且这种行为是零星的。我正在调试它而没有很多进展,所以只验证其他事实即可。使用该库时可能会错过)。
我计划的下一个可能步骤是(除了调试我的代码),以查找我的hsearch库是否比上面的链接显示的库更旧。
任何帮助或指针,将不胜感激。
编辑:我找不到问题,所以最终使用哈希算法avaialble here创建了自己的hsearch像库。但是,我仍然想知道其他人是否也遇到过类似情况,或者是否有人可以用来进一步调查。
非常感谢你。
最佳答案
glibc
手册已过时。头文件实际上将ENTRY
定义为
typedef struct entry
{
char *key;
void *data;
}
ENTRY;
从
char*
到void*
的更改已完成in Feb 2000。此外,在the implementation code中无处引用
data
成员。