【发布时间】:2021-05-20 06:36:40
【问题描述】:
我正在尝试使用 for 循环逐个更改字符串的字符,并且在real_A[i]=ciphertext[i]; 中发生分段错误,这是使用密文更改 real_A 字符串的字符的代码。
这是我的代码:
string substitution(string plaintext, string ciphertext)
{
string real_A="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string real_a="abcdefghijklmnopqrstuvwxyz";
//change alphabets to ciphertext
for (int i=0,n=strlen(ciphertext);i<n;i++)
{
if (isupper(ciphertext[i]))
{
real_A[i]=ciphertext[i];
real_a[i]=real_A[i+32];
}
else if (islower(ciphertext[i]))
{
real_a[i]=ciphertext[i];
real_A[i]=ciphertext[i-32];
}
for (int i=0,n=strlen(plaintext);i<n;i++)
{
if (isupper(plaintext[i]))
{
//get the ascii num
int letter=plaintext[i]-65;
plaintext[i]=real_A[letter];
}
else if (islower(ciphertext[i]))
{
int letter=plaintext[i]-97;
plaintext[i]=real_a[letter];
}
}
return plaintext;
}
我该如何处理这个错误?我试图将 string real_A="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 更改为 string real_A[26];,但它给我带来了更多错误。
【问题讨论】:
-
您似乎正在尝试更改字符串文字。任何更改字符串文字的尝试都会导致未定义的行为。
-
在任何情况下,该函数至少没有任何意义,因为尽管它的返回类型不是 void 并且函数中未使用参数明文,但它什么也不返回。:)
-
请提供minimal reproducible example。至少可以更好地检查这里的关键字
string指的是什么。 -
快速解决方法是将
string real_A="...";替换为char real_A[]="...";,real_a也是如此。这会将real_A和real_a定义为可以修改的char数组。 -
@Damien
typedef char *string是一个被辱骂和误导的 CS50 可憎之物,以混淆太多 C 新手而闻名。
标签: c++ arrays string segmentation-fault cs50