#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, string argv[])
{
string k = argv[1];
if (argc == 2 && isalpha(k))
{
printf("plaintext: ");
string p = get_string();
printf("ciphertext: ");
for(int i=0, j = 0, n = strlen(p); i< n; i++, j++)
{
if (isupper(p[i]) && isupper(k[j % strlen(k)]))
{
printf("%c", (p[i] + (k[j % strlen(k)] - 65)));
}
if (islower(p[i]) && isupper(k[j % strlen(k)]))
{
printf("%c", (p[i] + (k[j % strlen(k)] - 65)));
}
if (isupper(p[i]) && islower(k[j % strlen(k)]))
{
printf("%c", (p[i] + (k[j % strlen(k)] - 97)));
}
if (islower(p[i]) && islower(k[j % strlen(k)]))
{
printf("%c", (p[i] + (k[j % strlen(k)] - 97)));
}
if (isspace(p[i]))
{
printf(" ");
}
if (ispunct(p[i]))
{
printf("%c", p[i]);
}
}
printf("\n");
}
else
{
printf("Invalid Key\n");
return 1;
}
}
这是我的CS50课程pset2中的vigenere密码的代码。
我在运行时遇到分段错误。但是,如果我在第10行中省略了&& isalpha(p[i])
,它就会消失,程序可以正常运行。是什么原因导致此故障?