pset2 vigenere帮助(分段故障)

时间:2018-10-03 08:17:57

标签: c segmentation-fault cs50 vigenere

    #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]),它就会消失,程序可以正常运行。是什么原因导致此故障?

0 个答案:

没有答案