首页 > 解决方案 > 字符串未初始化,初始化变量以消除此警告

问题描述

我正在 CS50 第 2 周上研究凯撒密码。我通常编写了大部分代码,但我没有调试的最后一个错误消息是最后字符串的初始化。您如何初始化字符串以使错误消息消失并实现我们的目标?

我的功能如下图所示:

//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

标签: ccs50

解决方案


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

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

考虑声明cipher一个数组chars。元素的数量将是明文的长度加上终止空字节的 1


推荐阅读