我构建了一个使用Vigenere密码编码单词或句子的应用程序。它工作但是一切都包含在main()中。我正在使用功能重建应用程序。但我收到的错误'下标值不是数组,指针或向量'当我觉得它是一个阵列时。
错误来自此
if ((int)sentencetoencode[repeatciphercounter] < 65 || ((int)sentencetoencode[repeatciphercounter] > 90 && (int)sentencetoencode[repeatciphercounter] < 97) || (int)sentencetoencode[repeatciphercounter] > 122)
{
ciphersentence[repeatciphercounter] = (char)32;
指向整数转换的不兼容指针的附加警告传递&#39; char [100]&#39;参数类型&#39; char&#39;
CipherRepeater(sentencetoencode, cipherwordtorepeat, ciphersentence);
完整代码
#include <stdio.h>
#include <string.h>
char CipherRepeater(char sentencetoencode, char cipherwordtorepeat, char ciphersentence);
int main(int argc, char * argv[])
{
// This is a message to encode using Vigenere cipher
char sentencetoencode[100] = "secret message is come over at five";
// Pass a word at command line, then assign that word to cipherwordtorepeat
// This word is the Vigenere encoding key
// Example word: cat
char cipherwordtorepeat[100];
for(unsigned long argvcounter = 0, argvlength = strlen(argv[1]); argvcounter < argvlength; argvcounter++)
{
cipherwordtorepeat[argvcounter] = argv[1][argvcounter];
}
// Now the word cat needs to be repeated until it matches the length of the message
// Example "secret message is come over at five"
// "catcat catcatc at catc atca tc atca"
// Declare an array of characters
// Then the function fills the array with the repeating word
char ciphersentence[100];
CipherRepeater(sentencetoencode, cipherwordtorepeat, ciphersentence);
printf("%s\n", ciphersentence);
return 0;
}
char CipherRepeater(char sentencetoencode, char cipherwordtorepeat, char ciphersentence)
{
// Create a counter to make sure to go back to char 0 in the word array when end is reached
int endofwordcounter = 0;
unsigned long cipherwordlength = strlen(&cipherwordtorepeat);
// Take the cipher word and repeat it until it's the same length as the word to encode
for (unsigned long repeatciphercounter = 0, sentencetoencodelength = strlen(&sentencetoencode); repeatciphercounter < sentencetoencodelength; repeatciphercounter++)
{
// Put a space in the new string in any spot where a non-letter is used
if ((int)sentencetoencode[repeatciphercounter] < 65 || ((int)sentencetoencode[repeatciphercounter] > 90 && (int)sentencetoencode[repeatciphercounter] < 97) || (int)sentencetoencode[repeatciphercounter] > 122)
{
ciphersentence[repeatciphercounter] = (char)32;
}
else
{
// Copy the character
ciphersentence[repeatciphercounter] = cipherwordtorepeat[endofwordcounter];
endofwordcounter++;
if (endofwordcounter >= cipherwordlength)
{
endofwordcounter = 0;
}
}
}
return 0;
}
答案 0 :(得分:3)
您的sentencetoencode
被声明为
// This is a message to encode using Vigenere cipher
char sentencetoencode[100] = "secret message is come over at five";
但您的CipherRepeater
被声明为
char CipherRepeater(char sentencetoencode, char cipherwordtorepeat,
char ciphersentence);
接受char
而非char*
。你正在将char*
传递给该函数
这是产生错误
incompatible pointer to integer conversion passing 'char [100]' to parameter type of 'char'
所以将char
更改为char*
。
并将strlen(&cipherwordtorepeat)
替换为strlen(cipherwordtorepeat)
,并与for循环中的其他strlen
类似。