在程序中出现不兼容的整数到指针的转换错误。不确定 how/why 是否确实发生了这种情况,但正在寻找解释

Getting incompatible integer to pointer conversion error in program. Unsure how/why exactly this is occurring but looking for an explanation

我正在计算 char p[] 中有多少个破折号“-”。我遍历字符串,并使用 strcmp 函数将 p[i] 位置的内容与“-”进行比较。 strcmp 函数 returns 0 如果它们相同。

int howmanyDash( char p[] ){
    int length = strlen(p);
    int i, count = 0;

    for (i = 0; i < length; i++)
    {
        if (strcmp(p[i], "-") == 0)
        {
            ++count;
        }   
    }

    return count;
    
}
int main(){
    char word[20];
    scanf("%s", word);
    int dashCount = howManyDash(word);
    printf("Dashes: %d\n", dashCount);

    return 0;
}

我收到的错误如下: 警告:不兼容的整数到指针的转换将 'char' 传递给类型 'const char *' 的参数;使用 & [-Wint-conversion] 获取地址 如果 (strcmp(p[i], "-") == 0)

第 7 行生成此警告:if (strcmp(p[i], "-") == 0)

函数strcmp有如下声明

int strcmp(const char *s1, const char *s2);

如你所见,它的两个参数都是指针类型const char *

但是在你的程序中 strcmp

if (strcmp(p[i], "-") == 0)

您提供了 char 类型的第一个参数 p[i]。看来你想比较两个字符

if ( p[i] == '-' )

您可以使用函数 strcmp 但您必须提供一个字符串作为函数的第一个参数,例如

if ( strcmp( &p[i], "-" ) == 0 )

这个 strcmp 的调用在语义上是正确的,但只有在指针表达式 &p[i] 指向的字符串也表示字符串文字 "-".在其他情况下,if 语句的计算结果为 false。

注意函数howmanyDash的参数应该有限定符const,因为传递的字符串在函数内不会改变。并且没有必要使用任何标准的 C 字符串函数(尽管您可以使用标准函数 strchr)。

可以通过以下方式声明和定义函数。

size_t howmanyDash( const char s[] )
{
    size_t count = 0;

    for ( ; *s; ++s )
    {
        if ( *s == '-' )
        {
            ++count;
        }   
    }

    return count;
}

在主要部分你可以写

size_t dashCount = howManyDash(word);
printf("Dashes: %zu\n", dashCount);

使用函数strchr,函数howManyDash可以写成下面的方式

size_t howmanyDash( const char s[] )
{
    size_t count = 0;
    const char c = '-';

    for ( ; ( s = strchr( s, c ) ) != NULL; ++s )
    {
        ++count;
    }

    return count;
}