C语言 尝试解决问题集时出现分段错误(核心转储)

6mw9ycah  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(108)

我试图解决哈佛CS50课程中的凯撒p集,我认为我基本上是在正确的道路上,但我刚刚开始得到错误“分段错误(核心转储)"。
我对编码还是个新手,这就是为什么当我在看其他类似的问题时,我在解决这个问题上遇到了一些麻烦。也许有人能看一眼我的代码并提供帮助。

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

char rotate(char c, int n);

int main(int argc, string argv[])
{
    // SAVE CLA AS VARIABLES
    string plaintext = get_string("plaintext: ");
    int key = atoi(argv[1]);
    string cipher = "";
    int length  = strlen(plaintext);

    for (int i = 0; i < length; i++)
    {
        cipher[i] = rotate(plaintext[i], key);
    }

    printf("%s\n", cipher);
}

char rotate(char c, int n)
{
    //test if c = key is in right range
    c = c + n;

    while (c > 122)
    {
        c = c - 122 + 64;
    }
    return c;
}
bvjxkvbb

bvjxkvbb1#

首先,你必须记住stringchar *的别名,也就是说,string是指向char的指针。
那么对于这个问题:定义

string cipher = "";

使变量cipher指向一个空字符串,更具体地说,它使cipher指向数组的第一个元素,因为所有的字符串实际上都是字符数组,它是一个只有一个元素的数组,也就是字符串结束符。
与任何其他数组一样,它的大小是固定的,不能变大。
与其他数组不同,不允许修改文本字符串数组。
因此,代码中有两个错误:
1.您试图写入数组的边界之外;
1.并且试图修改只读文本字符串
这两个错误都会导致 * 未定义的行为 *,这是导致崩溃的常见原因。

相关问题