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適切に定義していないことです。

定義時に十分な初期化子で初期化しない場合は、サイズを明示的に指定する必要があります。コンパイル時の配列は、使用法に基づいて魔法のように拡張されることはありません。明示的に言及するか、十分な数の初期化要素で初期化することにより、サイズを事前に決定する必要があります。

ここで、次のようなもの

 unsigned char caeser[100] = {0};

あなたのために仕事をします。

于 2015-05-29T15:35:48.260 に答える