在程序中出现不兼容的整数到指针的转换错误。不确定 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;
}
我正在计算 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;
}