使用strcmp(char *,char *)获取有关char *的错误

时间:2014-09-10 18:22:10

标签: c arrays string strcmp

我收到此错误:

$ gcc -Wall -g translate.c support.c scanner.c -o translate
support.c: In function ‘translate’:
support.c:148:13: warning: passing argument 1 of ‘strcmp’ from incompatible pointer type     [enabled by default]
             compareNum = strcmp(dict[i], token);
             ^
In file included from /usr/include/stdio.h:29:0,
                 from support.c:1:
/usr/include/string.h:28:6: note: expected ‘const char *’ but argument is of type ‘char **’
 int  _EXFUN(strcmp,(const char *, const char *));
  ^

这里是函数translate()

int
translate(char* token, char** dict[], int dictLength)
{
    int i = 0;
    int compareNum;

    for(i=0;i<dictLength;i++)
    {
        if(i % 2 == 0)
        {
            compareNum = strcmp(dict[i], token);
            ++i;
            if(compareNum == 1)
            {
                return i;
            }
        }
    }

return 0;

}

由于某种原因,我传递了dict [i],这是一个字符串数组,我试图将数组的每个偶数元素与字符串标记进行比较但是它说它的字符** 。我知道数组是char **但是元素不是char *吗?

2 个答案:

答案 0 :(得分:3)

dict参数声明如下:

char** dict[]

因此dict[i]的类型为char**。因此错误。

我想,为了让我们提供进一步的建议,我们需要在调用此函数时提供您作为dict参数提供的对象的一些细节。也许您只需要将参数的声明更改为:

char* dict[]

我强烈推荐的一件事是在声明这些参数时使用const,以允许您传递不可修改的字符串。

答案 1 :(得分:1)

您将dict参数声明为:

char** dict[]

这是char**的数组。

这意味着dict[index]char**

更改参数

char** dict[] 

char* dict[] 

应解决您的问题