没有NULL终止数据的hsearch库

时间:2014-02-01 16:23:39

标签: c hashtable

我正在使用hsearch library of glibc作为我的应用程序(C语言,在Fedora 17上)。我发现此网页http://www.gnu.org/software/libc/manual/html_node/Hash-Search-Function.html表示hsearch函数需要 NULL终止datakey的字符串。我理解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库是否比上面的链接显示的更早。

任何帮助或指针都会非常感激。

编辑:我无法找到问题所以最终使用hash algo avaialble here创建了我自己的类似库的hsearch。但是,我仍然想知道其他人是否遇到类似的情况,或者是否有人可以用来进一步调查。

非常感谢。

1 个答案:

答案 0 :(得分:0)

glibc手册已经过时了。头文件实际上将ENTRY定义为

typedef struct entry
  {
    char *key;
    void *data;
  }
ENTRY;

char*void*的更改已完成in Feb 2000

此外,the implementation code中无法引用data成员。