-1

我有一个数组

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

但是,每个返回都是 NULL。但是compare(pseq, m[5]) = 0对于 pseq = "CC"

4

1 回答 1

2

传递给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 中转换结果。
于 2021-02-20T01:33:07.610 回答