C/C++ strcmp 无法将参数 1 从 'char' 转换为 'const char *'

C/C++ strcmp cannot convert argument 1 from 'char' to 'const char *'

所以我正在传递一个包含几个单词的 char Array(En) 并且我正在尝试按字母顺序排序。不幸的是,我的编译器出现“int strcmp(const char *,const char *)”:无法将参数 1 从 'char' 转换为“const char *”,我有点卡住了!

void TDihotTable::Set(char *En){
    int i, j;
    bool sorted = false;
    char* pTemp = NULL;
    while (!sorted)
    {
        sorted = true;
        for (size_t i = 0; i < 6 - 1; ++i)
        {
            if (!strcmp(En[i], En[i + 1]) > 0)
            {
                sorted = false;
                pTemp = En[i];
                En[i] = En[i + 1];
                En[i + 1] = pTemp;
            }
        }
    }
}

strcmp() 期望其参数为 const char *,但在您的代码中,En[i]En[i+1] 的类型为 char.

  • 如果要压缩 chars,请使用 == 运算符。
  • 如果你想比较字符串,使用&En[i]&En[i+1]
  • 传递地址

也就是说,

 if (!strcmp(En[i], En[i + 1]) > 0)

错了。请验证你的逻辑。

使用En[i] != En[i + 1]比较字符。 strcmp 采用 char * 个参数,但 En[i]En[i + 1]char

strcmp() 需要字符串作为比较参数,而不是字符。所以,而不是这一行:

 if (!strcmp(En[i], En[i + 1]) > 0)

您可以根据需要直接将两个字符比较为 if(En[i]==En[i+1])if(En[i]!=En[i+1])

单词数组应该是一个二维字符数组:char **En。比较应该工作。

您的函数应该更像:

void TDihotTable::Set(char **En){
                           ^^

那将是一个指向字符串的指针数组,您可以像在

中那样对其进行 strcmp
       if (!strcmp(En[i], En[i + 1]) > 0)
           ^

这也是错误的。 使用

       if (strcmp(En[i], En[i + 1]) > 0)

目前您尝试比较单个字符。