Сегментация лягушатника - PullRequest
0 голосов
/ 20 апреля 2020

что я пытаюсь сделать

#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;
  }
}

, если я пройду 20x, это должно показать мне (Использование: ./caesar) вместо того, чтобы я получил ошибку Сегментации почему !! кто-нибудь может мне помочь, и я буду спасибо

1 Ответ

3 голосов
/ 20 апреля 2020

Ваш первый l oop перебирает количество символов в первом аргументе команды и пытается получить доступ к аргументу команды этого индекса. Поэтому, если у вас только один аргумент команды, но этот аргумент содержит более 2 символов, вы будете пытаться получить доступ к элементу в argv за концом массива.

...