【发布时间】:2016-05-24 07:37:39
【问题描述】:
我在这里有一个程序,我正在尝试使用凯撒密码来解码一串字母;本质上,我将字符串中的每个字符“向下”移动一个字母(“a”->“b”、“f”->“g”、“z”->“a”)。
我向下移动一个字母的数量取决于我给它的键。
在这个特定的程序中,我在 main() 函数中硬编码了一个秘密编码消息,以及一个遍历每个可能键的 for 循环。
这个想法是,如果这个秘密信息简单地向下移动 x 个字母,吐出 25 个版本的密码将揭示一个可理解的答案。
不幸的是,我在一个程序中使用了一些新概念 - argc、argv 和多个函数。我对此很陌生。
有人可以帮助解释我遇到的分段错误吗?我认为我不会导致任何参数溢出。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
string decode(int key, string message);
int main(void)
{
string secret_message = "ueuag rKJ AGIQ GIAR FEgN";
for (int i = 0; i < 25; i++)
{
decode(i, secret_message);
printf("%s", secret_message);
}
return 0;
}
string decode(int key, string message)
{
int i;
for (i = 0; i < strlen(message); i++)
{
if (message[i] >= 'a' && message[i] <= 'z')
{
message[i] = ((message[i] - 97 + key) % 26) + 97;
}
else if (message[i] >= 'A' && message[i] <= 'Z')
{
message[i] = ((message[i] - 65 + key) % 26) + 65;
}
}
return message;
}
【问题讨论】:
-
不知道它的定义,我猜直接把
string传给printf不好。 -
什么是
string???它在哪里声明?并且为了避免与std::string发生不必要的混淆,我会从中删除 [C++] 标记。这不是 C++.. -
看起来
string是来自cs50.h的char*的typedef,这是计算机科学课程的流行 库。 -
哇.. 尝试教人 C 时,这真是个坏主意。
-
@rodrigo:在那种情况下,[C++] 标签在这里没有任何业务。
标签: c segmentation-fault cs50 caesar-cipher