c - 字符串未初始化,初始化变量以消除此警告
问题描述
我正在 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
解决方案
字符串是表面上创建的 CS50 数据类型get_string
请记住第 2 课(大约 52:21):字符串是“幕后char
”的 s 数组。并且计算机需要知道它在哪里结束,正如在“Null Terminator”(大约 1:00:50)的同一讲座中所讨论的那样。
考虑声明cipher
一个数组chars
。元素的数量将是明文的长度加上终止空字节的 1。
推荐阅读
- azure - MS Graph Daemon App - 获取承载令牌
- r - 在R中使用带有自定义函数的apply删除for循环
- django-rest-framework - 使用相同查找应用多个值时如何执行“或”?
- select - 过滤依赖于另一个值的值
- c# - 向 webservice 传递参数并接收值
- highcharts - 可以像这样设置 HIGHCHARTS 样式吗?
- go - 为什么比赛检测器在这里报告比赛条件?
- azure - 在 Azure 上发布特定的 appsettings.json 文件
- reactjs - React 似乎在修改变量名,然后抱怨它们不存在
- java - 我可以知道后台用户是否忘记保存他的更改吗?