这是哈佛cs50第2周的问题,https://cs50.harvard.edu/x/2023/psets/2/substitution/。
它给了我错误
不兼容的整数到指针转换将“char”传递给类型“const char*”的参数;
它发生在第36行,当我试图编译程序时。我正在使用cs50.dev在浏览器中运行vs代码。在这里,您可以使用<cs50.h>x1c 0d1x
我该如何解决?
#include <cs50.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
int main(int argc, string argv[])
{
string pt = get_string("plaintext: ");
int len = strlen(pt);
string ct;;
string key = argv[1];
int lenkey = strlen(key);
if (lenkey < 26)
{
printf("Key must contain 26 characters.");
}
else if (argc > 2)
{
printf("Usage: ./substitution key");
}
else if (argc < 2)
{
printf("Usage: ./substitution key");
}
string keyu;
string keyl;
// Key of uppercase
for (int i = 0; i < 26; i++)
{
if (isupper(key[i]))
{
keyu = strcat(keyu, key[i]);
}
else if (islower(key[i]))
{
keyu = strcat(keyu, toupper(key[i]));
}
}
// key of lowercase
for (int i = 0; i < 26; i++)
{
if (islower(key[i]))
{
keyl = strcat(keyl, key[i]);
}
else if (isupper(key[i]))
{
keyl = strcat(keyl, toupper(key[i]));
}
}
// create cyphertext
for (int i = 0; i < len; i++)
{
if (islower(pt[i]))
{
ct = strcat(ct, keyl[pt[i] - 97]);
}
else if (isupper(pt[i]))
{
ct = strcat(ct, keyu[pt[i] - 65]);
}
else
{
ct = strcat(ct, pt[i]);
}
}
}
1条答案
按热度按时间uujelgoq1#
正如好的评论中所指出的,错误的主要问题是“strcat”函数被设置为将一个字符数组(字符串)连接到另一个字符数组(字符串)。在您的代码中,它试图将字符连接到字符数组。
下面是程序的重构版本,它基于加密密钥构建单词的加密版本。
此重构代码的一些关键点是:
以下是对重构代码的一些测试。
我绝不是在诋毁“CS50”支持库和文件。在您的研究中使用您认为合适的功能。但是当您评估来自其他来源的代码时,您可能会看到字符数组定义和其他变量定义等项更有可能采用这种通用格式。因此,您也希望对以这种方式构建的代码感到舒适。