分割故障c

时间:2020-04-20 05:49:47

标签: c cs50

what I try to do

#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

int main(int argc, string argv[]) {
  for (int i = 0; i < strlen(argv[1]); i++) {
    if (isalpha(atoi(argv[i]))) {
      printf("Usage: ./caesar key\n");
      return 1;
    }
  }
  int k = atoi(argv[1]);
  if (argc == 2) {
    string pt = get_string("plaintext: ");
    printf("ciphertext: ");
    char ct[strlen(pt)];
    for (int i = 0; i < (strlen(pt)); i++) {
      if (isalpha(pt[i]) && isupper(pt[i])) {
        ct[i] = ((pt[i] - 65) + k) % 26;
        printf("%c", ct[i] + 65);
      } else if (isalpha(pt[i]) && islower(pt[i])) {
        ct[i] = ((pt[i] - 97) + k) % 26;
        printf("%c", ct[i] + 97);
      }
    }
    printf("\n");
  }

  else if (argc != 2) {
    printf("Usage: ./caesar keyn\n");
    return 1;
  }
}

如果我通过20倍,它必须告诉我(用法:./ caesar) 而不是我得到细分错误,为什么! 谁能帮助我,我会胜过

1 个答案:

答案 0 :(得分:3)

您的第一个循环遍历第一个命令参数中的字符数,并尝试访问该索引的命令参数。因此,如果您只有一个命令自变量,但该自变量具有2个以上的字符,则您将尝试访问数组数组末尾的argv中的元素。