比较 C++ 中的字符 - 类型为"char"的参数与类型为"const char * "的参数不兼容

Comparing chars in C++ - argument of type "char" is incompatible with parameter of type "const char *

本文关键字:char 参数 类型 const 不兼容 C++ 比较 字符      更新时间:2023-10-16

我正在尝试比较C++中的两个值(这是新的,所以请轻松)

struct styles{
int itemNo;
char desc[26]; 
char brand[21]; //between 3 - 20
char category;
double cost;
};  

struct,然后im在另一个函数中使用此代码

char cat[2];
for (x=0;x<size;x++)
{
    if (strcmp(cat,styleAr[x].category)==0)

if语句中的"styleAr[x].category"出现错误:类型为"char"的参数与类型为"const char*"的参数不兼容

任何关于我如何解决这个问题的解释都将是很棒的

假设cat是一个字符串(即一个字符后面跟着一个''),那么您应该这样做:

if (cat[0] == styleAr[x].category)

当然,如果你使用std::string catstd::string category,你可以写:

if (cat == styleAr[x].category)

您将category作为单个char,而cat是一个字符数组(即char *)。。。您可能无意将字符串与单个字符进行比较

strcmp比较字符数组,但类别只是一个char,因此出现错误。您可以使用==直接比较两个字符如果类别应该是单个字符,则需要更改比较代码

char cat='?';//or whatever you are looking for
for (x=0;x<size;x++)
{
    if (cat == styleAr[x].category)

您正在将未初始化为任何值(至少在您向我们展示的代码中未初始化)的双字符数组(cat)与单个字符进行比较。

strcmp函数接受两个类型为const char*的参数,即两个以null结尾的c样式字符串(一个字符数组,其最后一个元素是"\0"字符,即null字符)。

如果只想比较一个字符,请使用以下代码:

char cat = ; // Put the character you want to compare styleAr[x].category against there.
for (int x = 0 ; x < size; x++)
{
    if (cat == styleAr[x].category)
    {
       // The two characters are equal.
    }
}