我对这段代码的处理是通过将每个字母移动一定数量的字符来加密一个字符数组(如果数量为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;
}
答案 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
变量