在 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。
我有一个数组
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。