4
#include <stdio.h>
#include <stdlib.h>
#include <search.h>
#include <assert.h>

char *data[] = { "alpha", "bravo", "charlie", "delta",
      "echo", "foxtrot", "golf", "hotel", "india", "juliet",
      "kilo", "lima", "mike", "november", "oscar", "papa",
      "quebec", "romeo", "sierra", "tango", "uniform",
      "victor", "whisky", "x-ray", "yankee", "zulu"
       };

int
main(void)
{
    ENTRY e, **ep;
    struct hsearch_data *htab;
    int i;
    int resultOfHcreate_r;
    resultOfHcreate_r=hcreate_r(30,htab);
    assert(resultOfHcreate_r!=0);
    hdestroy_r(htab);
    exit(EXIT_SUCCESS);
}

エラーhcreate_r

これを使用する方法はhcreate_r

そして他の質問はそれです:

GNU拡張Cライブラリの例を教えていただけますか?GNU拡張Cライブラリのドキュメントは書くのに十分な知識ではないと思います。

また、拡張機能Cライブラリの使用方法について多くの質問があります。

4

1 に答える 1

5

#define _GNU_SOURCEまず、GNU拡張機能に正しくアクセスするために、マクロを追加する必要があります。すなわち:

#define _GNU_SOURCE
#include <search.h>

次に、ドキュメントを理解する必要があります。

関数:int hcreate_r(size_t nel、struct hsearch_data * htab)

The hcreate_r function initializes the object pointed to by htab to contain a 
hashing table with at least nel elements. So this
function is equivalent to the hcreate function except that the
initialized data structure is controlled by the user.

This allows having more than one hashing table at one time. 
The memory necessary for the struct hsearch_data object can be allocated
dynamically. It must be initialized with zero before calling this
function.

The return value is non-zero if the operation was successful. 
If the return value is zero, something went wrong, which probably means
the programs ran out of memory.


したがって、とは異なりhcreate、ハッシュテーブルのデータ構造を提供しますさらに、これらの構造はゼロに初期化する必要があります。したがって、おそらく次のようなことをしたいと思うでしょう。

//dynamically create a single table of 30 elements 
htab=calloc(1,sizeof(struct hsearch_data));
resultOfHcreate_r=hcreate_r(30,htab);

//do some stuff

//dispose of the hash table and free heap memory
hdestroy_r(htab);
free(htab)
于 2012-05-11T14:52:05.737 に答える