Строка унифицирована, инициализируйте переменную, чтобы отключить это предупреждение - PullRequest
0 голосов
/ 15 апреля 2019

Я работаю над шифром Цезаря на 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

1 Ответ

0 голосов
/ 15 апреля 2019

Строка - это тип данных CS50, якобы созданный для get_string

Помните из лекции 2 (около 52:21): строка - это массив char s «под капотом».И компьютер должен знать, где он заканчивается, как обсуждалось в той же лекции в «Null Terminator» (около 1:00:50).

Подумайте об объявлении cipher массива chars.Число элементов будет иметь длину открытого текста плюс 1 для завершающего нулевого байта .

...