鱼C论坛

 找回密码
 立即注册
查看: 2308|回复: 4

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

[复制链接]
发表于 2018-11-11 15:29:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[i]!=b[i])
                         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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-11 19:51:02 | 显示全部楼层
scanf("%s",&res),这里要把res定义成数组或指针,你的res是char类型,只能接受一个字符,你定义成数组就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i]!=b[i]) 
        return 0;
        }
    return 1;
}


int main()
{
        char *a = "m123";//设定密码为m123 
        char res[4];
        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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i] != b[i])
                        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;
}  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-13 13:39:02 | 显示全部楼层
记住   数组名是数组元素的首地址就行了吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 18:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表