在 C 中努力实现 bsearch

Struggling with bsearch implementation in C

我有一个数组

char* m[] = {"AA", "AC", "AG", "AT", "CA", "CC", "CG", "CT", "GA", "GC", "GG", "GT", "TA", "TC", "TG", "TT"};

我正在尝试获取与 pseq = (char*)malloc(2);

匹配的条目的索引

我现在只是在使用一个基本的比较功能,因为我希望稍后创建一个特定的功能

int compare(const void *a, const void *b)
{
        return strcmp(a, b);
}

size_t mlen = sizeof(m)/sizeof(m[0]); 

我对 bsearch 的尝试是:

char* q = bsearch(&pseq, m, mlen, sizeof(m[0]), compare);

但是,每个 return 都是 NULL。 但是 compare(pseq, m[5]) = 0 for pseq = "CC"

传递给 compare 的指针是指向 char* 的指针,因此您必须取消引用它们以获得 char* 指向要比较的字符串。

int compare(const void *a, const void *b)
{
        return strcmp(*(char**)a, *(char**)b);
}

还有

pseq = (char*)malloc(2);

看起来很糟糕,因为

  • 2 元素数组太小,无法存储像“CC”这样的字符串,因为没有空间来存储终止空字符。
  • malloc() 在 C 中的转换结果是 discouraged