C 段故障 Pset2 Cs50

C segmentation fault Pset2 Cs50

我正在 CS50 上执行 Pset2 cesear,当我在 运行 程序时不断遇到分段错误。为什么我得到它,什么是分段错误。 ...................................................

#include <ctype.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(int argc, string argv[])
{
    string key = argv[argc-1];

    int keylen = strlen(key);

    string plaintext = get_string("Enter the plaintext: ");

    int ciphertext [strlen(plaintext)];

    int move[strlen(key)];

    int counter = 0;


    for (counter = 0; counter < 26; counter++)
    {
        if ((plaintext[counter] > 96) && (plaintext[counter] < 123))
        {
            move[counter] = (plaintext[counter]) - 97 ;
            ciphertext[counter] =key[move[counter]];
        }

        else if (plaintext[counter] > 64 && plaintext[counter] < 91)
        {
            move[counter] = plaintext[counter] - 65;
            ciphertext[counter] =key[move[counter]];
        }

        else ciphertext[counter] = plaintext[counter];
    }
 for (int loop = 0; loop < strlen(plaintext); loop++)
 {
 printf("%c\n", ciphertext[loop]);
 }
}

what is a segmentation fault.

段错误意味着:您试图访问您的程序无法访问的内存。

Why am i getting it

因为你的程序有bug。

没有 http://whosebug.com/help/mcve 就很难说出 错误在哪里。可能是 get_string() 例程。

P.S。永远不要 永远 将指针隐藏在 typedef 后面(就像你显然对 string 所做的那样)——这只会让你和你的代码的其他读者感到困惑。

如果strlen(plaintext)小于26,则

for (counter = 0; counter < 26; counter++){
        if ((plaintext[counter] ...

可能会在 counter >= strlen(plaintext) 时立即导致段错误,因为您正试图访问其范围之外的 plaintext 数组。您可能打算遍历字符串而不是字母表。