为什么我的Caesar密码程序执行时出现错误?

时间:2019-04-25 04:54:43

标签: c

我正在研究凯撒密码程序。目前,我正在尝试加密邮件。我正在编写一个函数来完成此任务。 编译器执行代码时没有任何错误,但是代码的最终输出应该显示为加密的消息,它会生成,加密的消息为:

����

为什么会这样? 我的错误代码如下。任何形式的帮助将不胜感激。预先谢谢你。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

1 个答案:

答案 0 :(得分:4)

该代码甚至不应该编译。 (bchar(*)(char*, int)之间的类型不匹配。)

char

返回函数return (encrypt_rot); 的地址。也许您想写encrypt_rot。但是然后您应该知道,您不应该从函数返回局部变量的地址(在这种情况下为return a;,因为一旦函数返回其调用者并且返回的指针不再有效,则该变量将消失。同样,a的返回类型encrypt_rotchar的{​​{1}}类型不匹配,或者在本例中为a的返回类型为{{ 1}}。

我建议您就地修改参数char[100]

return a;

顺便说一句,您应该考虑使用更好的变量名。

char *

在没有指定SIZE来防止缓冲区溢出的情况下,永远不要,永远不要真正使用x格式说明符:

void encrypt_rot(char x[100], int y)
{
    for (size_t i = 0; i < 100 && x[i] != '\0'; ++i)
    {
        x[i] += y;
        if (x[i] > 'z')
            x[i] -= 26;
    }
}
相关问题