非常基本的加密

时间:2016-12-05 22:53:42

标签: c

#include <stdio.h>
int limit;
char alp[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','w','x','y','z'};
void encode(char message[21],char enc_message[21],int key);

void decode(char enc_message[21],char dec_message[21],int key);


main()
{



int key,i=0,j=0;
char message[21];
char enc_message[21];
char dec_message[21];
char encrypted[21];
char a='\0';
printf("Input the characters to encrypt\n");
 while(i<21 && a!='\n')
    {
    scanf("%c",&a);
    message[i]=a;
    i=i+1;
    }

for(i=0;;i++) /*custom strlen*/
        {
        if( message[i]= '\0')
            {
            limit=i;
            break;
            }
        }
printf("Input the key");
scanf("%d",key);


for(i=0;i<21;i++)
{
enc_message[i]=message[i];
}


encode(message[21],enc_message[21],key);


for(i=0;i<21;i++)
    {
    dec_message[i]=enc_message[i];
    }

for(i=0;i<limit;i++)
    {
    printf("%c",enc_message[i]);
    }


printf("\n\n");


decode(enc_message[21],dec_message[21],key);


for(i=0;i<limit;i++)
    {
    printf("%c",dec_message[i]);
    }






}







void encode(char message[21],char enc_message[21],int key)
    {
    /*char temp[21];*/
    int x,y;
    for(x=0;x<limit;x++)  /* message check */
        {
        for(y=0;y<26;y++) /* <----- alphabet check */
            {
            if (enc_message[x]==alp[y]) enc_message[x]=alp[y+key];
            }
        }
    }   
/*------------------------------------------------------------------------*/
void decode(char enc_message[21],char dec_message[21],int key)
    {
    int x,y;
    for (x=0;x<limit;x++)
        {
        for(y=0;y<26;y++)
            {
            if (dec_message[x]==alp[y+key]) dec_message[x]=alp[y]; 
            }
        }
    }

编译器说,错误与我调用函数(并写入函数)的方式有关,并说:传递&#39;编码&#39;在没有强制转换的情况下从整数生成指针,这对于&#39;编码&#39;的参数2对于&#39; decode&#39;

完全相同

提前致谢!

1 个答案:

答案 0 :(得分:3)

您传递的是单个元素,它甚至不是有效元素,请尝试

decode(enc_message, dec_message, key);

另外,格式化代码使其可读性非常重要,并且循环计算字符串的长度以在另一个循环中使用它并不是一件非常聪明的事情,将其打印在循环中,如

for (int i = 0 ; enc_message[i] != '\0' ; ++i) ...

另外,不要过度使用break,只要考虑循环的逻辑条件,它就是你break的同一条件。如果条件出现在正确的位置,则代码更易读。