我正在研究凯撒密码程序。目前,我正在尝试加密邮件。我正在编写一个函数来完成此任务。 编译器执行代码时没有任何错误,但是代码的最终输出应该显示为加密的消息,它会生成,加密的消息为:
����
为什么会这样? 我的错误代码如下。任何形式的帮助将不胜感激。预先谢谢你。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
答案 0 :(得分:4)
该代码甚至不应该编译。 (b
和char(*)(char*, int)
之间的类型不匹配。)
char
返回函数return (encrypt_rot);
的地址。也许您想写encrypt_rot
。但是然后您应该知道,您不应该从函数返回局部变量的地址(在这种情况下为return a;
,因为一旦函数返回其调用者并且返回的指针不再有效,则该变量将消失。同样,a
的返回类型encrypt_rot
与char
的{{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;
}
}