我有两个字符串比较,以检查他们是否相同,它工作,但当我打开今天的项目,它游戏我的错误。
warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char (*)[5]'
warning C4024: 'strcmp' : different types for formal and actual parameter 1
warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char (*)[5]'
warning C4024: 'strcmp' : different types for formal and actual parameter 1
printf("Your answer: ");
scanf_s("%s", &answer, 5);
//strlwr(answer);
_strlwr(answer);
if ((strcmp(&answer, "ja") && location[question].rightAnswer == 1) || (strcmp(&answer, "nej") && location[question].rightAnswer == 0) || (strcmp(&answer, "yes") && location[question].rightAnswer == 1) || (strcmp(&answer, "no") && location[question].rightAnswer == 0)){
printf("Right answer!\n\n");
points += difficulty;
}
else if ((strcmp(&answer, "ja") && location[question].rightAnswer != 1) || (strcmp(&answer, "nej") && location[question].rightAnswer != 0)){
printf("Wrong answer!\n\n");
}
else{
printf("Don't understand your input\n");
}发布于 2015-01-05 23:55:32
strcmp接受两个const char*,对于第二个参数,你传递的是"ja",这是正确的,而对于第一个参数,你传递的是一个由5个char组成的数组的指针,这就是你在编译器错误中看到char (*) [5]的原因。修复它的方法是
strcmp(answer, "ja"); // & operator NOT applied to answer当这样做时,数组衰减将启动,类型为char [5]的answer将变成char*,一个指向数组第一个元素的字符指针。
当你应用&运算符时,你会得到一个指向数组本身的指针,而不是衰减行为。这是少数几个不会发生衰变的地方之一。另外两个是sizeof和字符串文字初始化器。详情请参见here。
发布于 2015-01-05 23:57:23
看起来您是这样定义answer的(这很好):
char answer[5];在这种情况下,answer实际上已经是一个“指向字符串的指针”。这就是您在调用字符串实用函数时需要使用的全部内容:
strcmp(answer, "ja");发布于 2015-01-06 00:03:04
警告已经足够清楚了。strcmp的第一个参数的类型与该参数的类型不对应。
当您尝试将指针传递给由五个字符组成的数组char (*)[5]时,参数的类型为const char *
你必须写得很简单
strcmp( answer, "ja" ) 在本例中,类型为char[5]的字符数组answer被转换为指向函数所需的第一个元素的指针。
考虑到如果你想检查字符串的相等性,你应该写成
if ( strcmp( answer, "ja" ) == 0 ) /*...(/因此,第一个if语句的正确记录看起来如下所示
if ( ( strcmp( answer, "ja" ) == 0 && location[question].rightAnswer == 1 ) ||
( strcmp( answer, "nej" ) == 0 && location[question].rightAnswer == 0 ) ||
( strcmp( answer, "yes" ) == 0 && location[question].rightAnswer == 1 ) ||
( strcmp( answer, "no" ) == 0 && location[question].rightAnswer == 0 ) )
{
printf("Right answer!\n\n");
points += difficulty;
}同样,下一条else-if语句也必须重写。
看来这句话也是
scanf_s("%s", &answer, 5);必须写成这样
scanf_s("%s", answer, sizeof( answer) );https://stackoverflow.com/questions/27782980
复制相似问题