变量大小的对象可能无法初始化,错误

时间:2015-02-05 21:05:31

标签: c

我对这段代码的处理是通过将每个字母移动一定数量的字符来加密一个字符数组(如果数量为2,则字符被移位两次 - 例如'a' - >'c')。 / p>

我收到以下错误和警告。

Error on line 39: Variable Sized Object May not be initialized.
Warning on line 39 : Unused Variable cyph

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int CharToAlphaNumber (char letter)
{
    int alpha;
    int ascii=letter;
    if (ascii >= 65 && ascii <=90)
    {
        alpha= ascii - 64;
    }
    else if (ascii >= 97 && ascii <= 122)
    {
        alpha= ascii - 96;
    }
    return alpha;
}


int main(int argc, char* argv[])
{
    if (argc != 2)
    {
        puts ("You need to enter a key, only one argument");
    }
    else
    {
        int key = atoi(argv[1]);
        puts ("Give me text:");
        char plaintext[100];
        scanf ("%s", plaintext);
        printf ("You entered %s\n",plaintext);

        char cyph[100];
        int i;
        for (i=0;i<strlen(plaintext);i++)
        {
            char cyph[i]=(CharToAlphaNumber(plaintext[i])+key)%26; //Line 39
        }

        printf ("Cyphered:%s",cyph);

    }
    return 0;
}

2 个答案:

答案 0 :(得分:4)

您有一个可变范围问题:

    char cyph[100];  <--- cyph you intend to use
    int i;

    for (i=0;i<strlen(plaintext);i++)
    {
        char cyph[i]=(CharToAlphaNumber(plaintext[i])+key)%26;  <--- new cyph
    }

for循环中,您已宣布新cyph来自char cyph[i] = ...。您之前已将cyph声明为char cyphy[100];,因此您无需再次声明它。校正:

    char cyph[100];
    int i;

    for (i = 0; i < strlen(plaintext); i++)
    {
        cyph[i] = (CharToAlphaNumber(plaintext[i]) + key) % 26;
    }

答案 1 :(得分:0)

这里你有第二个cyph表声明:

char cyph[i]=(CharToAlphaNumber(plaintext[i])+key)%26;

此外:

  • strlen(plaintext)创建保持字符串长度的变量并在条件中使用它。现在程序检查每个循环的长度

  • int ascii=letter;也不需要,您可以使用letter变量