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

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

本文关键字:char 转换 const strcmp C++ 参数      更新时间:2023-10-16

所以我通过了一个字符阵列(en),该数组(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;
            }
        }
    }
}

您的功能应该更像:

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

那将是一系列要串的指针,您可以像在

中一样strcmp
       if (!strcmp(En[i], En[i + 1]) > 0)
           ^

在商标上如此越野车。使用

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

目前尝试比较单个字符。

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

  • 如果您想comapre char s,请使用==操作员。
  • 如果要比较 strings ,请使用&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。然后比较应该起作用。