gpt4 book ai didi

c - bsearch() - 在结构数组中查找字符串

转载 作者:行者123 更新时间:2023-12-03 23:56:58 24 4
gpt4 key购买 nike

我有一个看起来像这样的结构:

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);

然而,这是一个小技巧,并且只有在字符串恰好是结构的第一个成员时才有效。在结构数组中查找字符串并返回指向该结构的指针的更好方法是什么?

最佳答案

您应该实现自己的比较器函数并将其传入。这里要记住的最重要(非平凡)的事情是根据 standard ,

The implementation shall ensure that the first argument is always a pointer to the key.



这意味着您可以编写一个比较器来比较字符串,例如 target和一个 dictionary_t目的。这是一个简单的函数,可以将您的结构与字符串进行比较:
int compare_string_to_dict(const void *s, const void *d) {
return strncmp(s, ((const dictionary_t *)d)->word, sizeof(((dictionary_t *)0)->word));
}

然后,您将按名称将其作为普通函数指针传递给 bsearch :
result = bsearch(target, dictionary, dict_length, sizeof(dictionary_t), compare_string_to_dict);

请注意 target不需要传入它的地址,因为它不再模拟结构。

如果您想知道, sizeof(((dictionary_t *)0)->word)是获取 word 大小的惯用方法在 dictionary_t .你也可以做 sizeof(dictionary[0].word)或定义一个等于 30 的常数。它来自 here .

关于c - bsearch() - 在结构数组中查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43872655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com