1

我想知道这里的错误是什么?我正在制作一个原因密码,它工作正常,但是当我最后打印加密的消息时,它会重新打印未加密的消息。当我注释掉并将消息设置为一个句子时,它工作正常。但是当我使用 fgets 得到一个字符串时,它会创建另一个副本。提前致谢!

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

int main(int argc, char *argv[]) 
{
    char message[100];  
    printf("Please Enter a message to be Encrypted: ");
    fgets(message, 100, stdin);
    unsigned char caeser[] = "";
    int j = 0;
    if(argc >= 2)
    {
    int k = atoi(argv[1]);
    for(int i = 0, n = strlen(message); i < n; i++)
    {
        printf("%i\n",n);
        if(!isspace(message[i]))
        {
            if(islower(message[i]))
            {
                j = message[i] - 97;
                caeser[i] = 97 + ((j + k) % 26);
            }
            if(isupper(message[i]))
            {
                j = message[i] - 65;
                caeser[i] = 65 + ((j + k) % 26);
            }
        }   
        else
        {
            caeser[i] = ' ';
        }
       }
    printf("%s\n", caeser);
    }
}
4

1 回答 1

0

这里没有问题fgets()。这里真正的问题是您没有caeser正确定义数组。

如果您在定义时没有使用足够的初始化程序进行初始化,则需要明确提供大小。编译时数组不会根据使用情况神奇地扩展。您必须预先确定大小,要么明确提及它,要么使用足够数量的 initalizer 元素对其进行初始化。

在这里,像

 unsigned char caeser[100] = {0};

会为你做这项工作。

于 2015-05-29T15:35:48.260 回答