c - 非常基本的加密

标签 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]; 
            }
        }
    }

编译器说,这个错误与我调用函数(和编写函数)的方式有关,并说:传递“encode”的参数 1 使指针来自整数而不进行强制转换,这是针对“encode”的参数 2和“解码”完全相同

提前致谢!

最佳答案

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

decode(enc_message, dec_message, key);

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

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

另外,不要过度使用break,只需考虑循环的逻辑条件,它与您break 的逻辑条件相同。如果条件出现在正确的位置,代码将更具可读性。

关于c - 非常基本的加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40984831/

相关文章:

c - C语言如何收集多个格式参数?

c - Linux命令打印出C函数代码

c - 我无法使用 g_object_get 或 g_object_get_property 在 GtkImage 上获取 "file"属性

c - OpenSSH 失败

c - Xcode 中的段错误,调试器无法帮助我

c++ - 如何使用 vApplicationTickHook() 函数测量 freeRTOS 中的任务执行时间?

c - 写入返回值 c

c - 删除 Kernighan 和 Ritchie 的评论程序

C多线程程序行为解释

c - 使用列表进行堆栈操作