【发布时间】:2017-10-07 22:22:28
【问题描述】:
我有一个看起来像这样的结构:
typedef struct dictionary_t{
char word[30];
int foo;
int bar;
} dictionary_t;
构成有序数组:
dictionary_t dictionary[100];
我想使用 bsearch() 在这个数组中搜索一个字符串并获得一个指向该结构的指针。到目前为止,这已经奏效了:
dictionary_t* result;
char target[30] = "target";
result = bsearch(&target, dictionary, dict_length, sizeof(dictionary_t), (int(*)(const void*,const void*)) strcmp);
但是,这有点小技巧,而且仅在字符串恰好是结构的第一个成员时才有效。在结构数组中查找字符串并返回指向该结构的指针的更好方法是什么?
【问题讨论】:
-
您需要实现一个比较函数,该函数将知道
dictionary_t类型结构并传递它而不是strcmp。在你的情况下这很容易 - 只是strcmp的包装。 -
自定义比较函数的示例位于standards page 的底部,用于
bsearch()。 -
这实际上是错误的,您需要使用正确的签名编写自己的比较函数,然后将 const void 指针分配给结构的 const bointers 并在成员上调用 strncmp()
-
感谢您的快速回复:)。我将阅读一些关于编写比较函数的内容并试一试。