C下标值不是数组,指针或向量 - 是的是?

时间:2016-06-13 04:05:15

标签: c arrays pointers char vigenere

我构建了一个使用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;
}

1 个答案:

答案 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类似。