设置为小写时 C 中的分段错误

Segmentation fault in C when setting to lower case

我遇到以下代码问题,无论我做什么,第二个 if 语句都会引发分段错误。两者很像,随便翻了翻,想不通。我什至隔离了代码和硬编码值以使其成为 运行 并确保我确切知道是什么代码导致了错误,但我仍然无法弄清楚原因。

编辑#2:它可能与使用 CS50 库的“字符串”类型有关,如果是这样,我需要一个可行的替代方案。但如果是这样的话,我想知道为什么它适用于第一个示例(第一个 for 循环)而不适用于第二个。

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

int main(void)
{

    int i;
    string key = "B";
    string alphabet = "a";

    for (i = 0; i < strlen(key); i++)
    {
        if (islower(key[i]) && isupper(alphabet[i]))
        {
            alphabet[i] = tolower(alphabet[i]);

        }
    }

    for (i = 0; i < strlen(key); i++)
    {
        if (isupper(key[i]) && islower(alphabet[i]))
        {
            alphabet[i] = toupper(alphabet[i]);
        }
                printf("yeet");
    }
}

编辑 #1:更新了 MRE。但是,我担心其他人的复现能力,因为这包括哈佛的 CS50 库,我不知道这个库在 CS50 课程之外的可访问性如何。

首先,我们需要您向我们展示完整的代码,这很重要,因为它可能就是问题所在。

问题可能是因为您试图修改其中包含常量字符串的 char*,您是否声明了这样的数组? :

char *key = "content A";
char *alphabet = "content B";

如果是,你的数组是常量,这意味着它们不能被修改,你需要像这样创建它们的副本

char *key = "content A";
char *key_cpy = malloc(strlen(key) * sizeof(char));
strcpy(key_cpy, key);

然后您可以修改 key_cpy 内容,因为内容不是常量,这意味着它可以修改

告诉我它是否有效!