我在我的应用程序中使用hsearch library of glibc(C语言,在Fedora 17上)。我发现此网页http://www.gnu.org/software/libc/manual/html_node/Hash-Search-Function.html,其中说hsearch函数要求datakey的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成员。

08-17 04:53
查看更多