我试图解决哈佛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;
}
1条答案
按热度按时间bvjxkvbb1#
首先,你必须记住
string
是char *
的别名,也就是说,string
是指向char
的指针。那么对于这个问题:定义
使变量
cipher
指向一个空字符串,更具体地说,它使cipher
指向数组的第一个元素,因为所有的字符串实际上都是字符数组,它是一个只有一个元素的数组,也就是字符串结束符。与任何其他数组一样,它的大小是固定的,不能变大。
与其他数组不同,不允许修改文本字符串数组。
因此,代码中有两个错误:
1.您试图写入数组的边界之外;
1.并且试图修改只读文本字符串
这两个错误都会导致 * 未定义的行为 *,这是导致崩溃的常见原因。