bsearch,const char数组和指针算术

时间:2013-12-02 07:16:56

标签: c arrays pointers char bsearch

我想使用带有const字符数组的bsearch来确定此数组中的索引。这是代码:

enum _command {dodaj, koniec, usun, wczytaj, wczytajwszystko, zapisz, zapiszwszystko};
const char *_command_s[] = {"dodaj", "koniec", "usun", "wczytaj", "wczytajwszystko", "zapisz", "zapiszwszystko"};
int
const_strcmp(const void *s1, const void *s2) {
    const char *key = s1;
    const char * const *arg = s2;
    return strcmp(key, *arg);
}

int main() {
char *pcommand. command[100];/*and other vars*/
pcommand = (char *)bsearch(command, _command_s, COUNT(_command_s), \
            sizeof(char *), (int (*)(const void *, const void *))const_strcmp);


if (pcommand == NULL) 
        fputs_state = fputs(PROMPT, stdout);
else {
    switch ((enum _command)((pcommand - (char *)_command_s)/sizeof(char *))) {
        case dodaj:
        (do something)

它正在使用GNU / Linux / gcc,但我不确定它是否符合ANSI标准,是否可以在其他编译器上正常工作。你认为我可以这样使用它,或者你有更好的建议来解决这个任务。

1 个答案:

答案 0 :(得分:1)

一些事情:

  • 比较func参数实际上是const char **,你将其中一个错误(键)。
  • 在这种情况下,
  • bsearch返回const char**。因此pcommand应为const char**,并以*pcommand的形式访问/打印。
  • 您使用未初始化的变量作为第一个参数(command)调用bsearch。
  • 使用这么多具有​​相似名称的变量令人困惑,至少可以说。至少在全局变量前加gg_

您的代码似乎符合标准。