c-输出无效ASCII文本的基本加密脚本



我目前正在尝试用C为CS50x编写一个基本的替换/加密脚本,一切都按照我的意愿进行,只是在打印加密文本后,它会打印1-2个随机字符,我似乎不明白为什么。

我们将不胜感激。

#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
int main(int argc, string argv[])
{
//Error print when too many command-line arguments, or invalid string length
string key = argv[1];
int keylength = strlen(key);
int alpha;
int i = 0;
if (argv[2] != (void *)0)
{
printf("Usage ./substitution (key)n");
return 1;
}
else
if(keylength != 26)
{
printf("Key must contain 26 characters.n");
return 1;
}
else
do
{
alpha = isalpha(argv[1][i]);
i++;
}
while (alpha != 0 && i != 25);
if(alpha != 0)
{
//Fetch plaintext
string plain = get_string("Plaintext: ");
int plainlen = strlen(plain);
char cipher[plainlen];
char keylower[keylength];
char keyupper[keylength];
//Convert plaintext to ciphertext
for(int k = 0; k < plainlen; k++)
{
if(isalpha(plain[k]) != 0)
{
if(islower(plain[k]))
{
int y = plain[k] - 97;
keylower[y] = tolower(key[y]);
cipher[k] = keylower[y];
}
else
{
int y = plain[k] - 65;
keyupper[y] = toupper(key[y]);
cipher[k] = keyupper[y];
}
}
else
{
cipher[k] = plain[k];
}
}
//Print ciphertext
printf("Ciphertext: %sn", cipher);
}
else
{
printf("Key must contain only alphabetical characters.n");
return 1;
}
}

我试过编辑数组的长度,只是一般地编辑一些行,这些行看起来可能有冲突,但没有用。

最简单的修复方法是在循环外声明k,然后使用它来终止密码字符串:

int k;
for(k = 0; k < plainlen; k++) {
// ...
}
cipher[k] = '';

相关内容

  • 没有找到相关文章

最新更新