字符串已统一,请初始化变量以使此警告静音

时间:2019-04-14 22:43:56

标签: c cs50

我正在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

1 个答案:

答案 0 :(得分:0)

字符串是表面上为get_string创建的CS50数据类型

请记住第2课(大约52:21):字符串是char在“幕后”的数组。并且计算机需要知道它在哪里结束,如同一演讲中“空终结者”(大约1:00:50)所讨论的。

请考虑将cipher声明为chars的数组。元素的数量将为纯文本的长度加上终止空字节的1