设置为小写时 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 内容,因为内容不是常量,这意味着它可以修改
告诉我它是否有效!
我遇到以下代码问题,无论我做什么,第二个 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 内容,因为内容不是常量,这意味着它可以修改
告诉我它是否有效!