Atticus 发表于 2018-11-11 15:29:04

C语言小白,不懂为什么参数会不匹配,希望大佬能指点一下

#include<stdio.h>
#include<string.h>
int fun(unsigned char * a ,unsigned char * b)//密码正确时返回1,不正确时返回2
{
int i;
        for( i=0;i<4;i++)      
   {   
               if(a!=b)
                       return 0;
       }
        return 1;
}


int main()
{
unsigned char a[]="m123";//设定密码为m123
unsigned char res;
scanf("%s",&res);
    if(fun(&a,&res)==0)//此行报错,大概意思是参数类型不匹配
       puts("wrong");
    if(fun(&a,&res)==1)//此行原因同上
       puts("right");
       return 0;
}

社会我鱼哥 发表于 2018-11-11 19:51:02

scanf("%s",&res),这里要把res定义成数组或指针,你的res是char类型,只能接受一个字符,你定义成数组就可以了

Seele丶 发表于 2018-11-11 19:56:31

吧res定义成字符就不报错了
代码我改了下
#include<stdio.h>
#include<string.h>
#include<malloc.h>
int fun( char *a , char *b)//密码正确时返回1,不正确时返回2
{
        int i=0;
//        printf("%s %s\n",a,b);
    for( i=0;i<4;i++)      
        {   
               
                if(a!=b)
      return 0;
        }
    return 1;
}


int main()
{
        char *a = "m123";//设定密码为m123
        char res;
        printf("请输入四位数密码:\n");
        scanf("%s",&res);
//        printf("%d",sizeof(res));
        if (strlen(res)!=4)
        {
                puts("wrong");
                return 0;
        }
/*                while(1)
                {
                        printf("字符数错误,请重新输入:\n");
                        scanf("%s",&res);
                        if (strlen(res)==4)
                                break;
                }
*/
//        res = (char *) malloc(10*sizeof(char));
        /*printf("\n");
        puts(res);*/
    if(fun(a,res)==0)//此行报错,大概意思是参数类型不匹配
         puts("wrong");
    if(fun(a,res)==1)//此行原因同上
         puts("right");
//free(res);
    return 0;
}

当打野会编程 发表于 2018-11-13 13:35:35

#include<stdio.h>
#include<string.h>
int fun(unsigned char * a, unsigned char * b)//密码正确时返回1,不正确时返回2
{
        int i;
        for (i = 0; i<4; i++)
        {
                if (a != b)
                        return 0;
        }
        return 1;
}


int main()
{
        unsigned char a[] = "m123";//设定密码为m123
        unsigned char res[] = {0};
        scanf("%s", res);
        if (fun(a, res) == 0)//此行报错,大概意思是参数类型不匹配
                puts("wrong");
        if (fun(a, res) == 1)//此行原因同上
                puts("right");
        return 0;
}

当打野会编程 发表于 2018-11-13 13:39:02

记住   数组名是数组元素的首地址就行了吧。
页: [1]
查看完整版本: C语言小白,不懂为什么参数会不匹配,希望大佬能指点一下