我正在CS50第2周上研究Caesar密码,我通常编写了大部分代码,但是最后未调试的错误消息是字符串的结尾。您如何初始化字符串以使错误消息消失并达到我们的目标?
我的功能如下所示:
//Ciphering Function
string plainToCipher(string plainText,int key)
{
int i = strlen(plainText);
string cipher;
int j = 0;
do
{
if(plainText[j] >= 'a' && plainText[j] <= 'z')
{
cipher[j] = ((plainText[j] - 'a') + key) % 26 + 'a';
}
else if(plainText[j] >= 'A' && plainText[j] <= 'Z')
{
cipher[j] = ((plainText[j] - 'A') + key) % 26 + 'A';
}
}while(j<i);
return cipher;
}
我收到此错误消息:
caesar.c:71:17: error: variable 'cipher' is uninitialized when used here
[-Werror,-Wuninitialized]
cipher[j] = ((plainText[j] - 'a') + key) % 26 + 'a';
^~~~~~
caesar.c:64:18: note: initialize the variable 'cipher' to silence this
warning
string cipher;
^
= NULL
答案 0 :(得分:0)
字符串是表面上为get_string
创建的CS50数据类型
请记住第2课(大约52:21):字符串是char
在“幕后”的数组。并且计算机需要知道它在哪里结束,如同一演讲中“空终结者”(大约1:00:50)所讨论的。
请考虑将cipher
声明为chars
的数组。元素的数量将为纯文本的长度加上终止空字节的1 。