我正在尝试将数据传递给函数并将其写入数组,但我一直收到一条错误,指出“从'char'到'char。*'的转换无效”我明白char []是一个函数和char *是一个指针,但据我所知,我没有声明任何一个元素作为指针。
我宣布了两个向量:
std::vector <char> broken(message.begin(), message.end());
std::vector <char> encoded(50);
我试图通过函数传递第一个向量,并将结果添加到第二个函数中,如下所示:
for (index = 0; index <= length - 1; index++)
{
encoded[index] = cipher(broken[index], length);
}
以此为功能:
char cipher(char broken[], int length)
{
char index; // declare index
if( broken[index] < 123 && broken[index] > 96 ) // if characters are lowercase,
{ // make them uppercase
broken = broken - 32;
}
for(index = 0; index <= length - 1; index ++)
{
broken[index] = broken[index] * (2/3);
broken[index] = broken[index] - 12;
broken[index] = broken[index] ^ 2;
}
cout << "Message encoded." << endl;
system ("pause");
return(broken[index]);
}
错误消息表明程序正在接收这些元素之一作为指针,但我不知道为什么。
使用的编译器是Bloodshed Dev C ++ 4.9.9.2。我很感激任何人都可以解决这个问题,因为我是第一个C ++学生并且对此很陌生。
谢谢!
答案 0 :(得分:1)
char broken[]
说broken
是一个指针。这是因为,在几乎所有上下文中,数组的名称都会衰减为指向其第一个元素的指针。这就是编译器抱怨的地方。功能
char cipher(char broken[], int length);
需要char*
和int
。这被称为:
cipher(broken[index], length)
尝试传递char
作为第一个参数,其中预期char*
。
答案 1 :(得分:1)
您想要编写的内容可能是编码一个字符的函数:
char cipher(char brokenChar)
{
if( brokenChar < 123 && brokenChar > 96 ) // if characters are lowercase,
{ // make them uppercase
broken = broken - 32;
}
//there is only one char:
brokenChar = brokenChar * (2/3);
brokenChar = brokenChar - 12;
brokenChar = brokenChar ^ 2;
return brokenChar;
}
现在,您可以使用for循环对整个消息进行编码:
std::vector <char> encoded(message.size());//maybe there are more than 50 characters
for (index = 0; index <= message.size() - 1; index++)
{
encoded[index] = cipher(message[index]);
}
然而,密码并不能达到您的预期:
brokenChar = brokenChar * (2/3)
总是0,因为2/3为零(你可以输入brokenChar*2/3
,这可能是你想要的)brokenChar = brokenChar ^ 2
并不意味着brokenChar*brokenChar
(我认为这是你的意图),而是按位xor
(顺便提一下将brokenChar提升为int
),因此密码总是如此无论输入是什么,都返回-10。 如果你想要解码你的信息,你的编码功能应该是双射的,即使操作按预期工作也不行