本文介绍了bsearch和结构(自定义类型)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个这样的数组:

  typedef结构INSTR
{
    字符*海峡;
    INT ARGC;
} INSTR;
常量静态INSTR说明[] = {{蓝色,1},{绿色,2}};

然后我试图做一个 bsearch ,但我发现分段故障消息:

  INT补偿(常量无效*一,常量无效* B)
{
    常量INSTR * AA =(INSTR *)一个;
    常量INSTR * BB =(INSTR *)B:
    //如果我回归0;在这里我没有得到任何错误。
    返回STRCMP(AA-> STR,BB-> STR);
}

 的char *海峡= get_string(src_buff,大小);
bsearch(STR,指令,
        的sizeof(指令)/ sizeof的(说明[0]),
        的sizeof(说明[0]),COMP);


解决方案

补偿()功能incorrect.From的:

int comparator ( const void * pkey, const void * pelem );

The first argument to your comp() is a const char*, not a INSTR*.

Change to:

int comp(const void *a, const void *b)
{
    const INSTR *bb = (INSTR*)b;
    return strcmp((const char*)a, bb->str);
}

Or, change the key to be a INSTR* instead of const char*.

这篇关于bsearch和结构(自定义类型)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 10:02