2015-05-29 57 views
1

我想知道錯誤在這裏?我製作了一個加密器,它工作正常,但是當我在最後打印加密的消息時,它會重新打印未加密的消息。當我發表評論並將消息設置爲一個句子時,它可以正常工作。但是當我使用fgets得到一個字符串時,它會創建另一個副本。提前致謝!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); 
    } 
} 
+2

'caeser []'只有1個字節與它關聯。當然'caeser [i] = 97 +((j + k)%26);'在外面寫道。 – chux

回答

0

這裏沒有問題fgets()這裏。真正的問題在於你沒有正確定義數組caeser

如果您未在定義時初始化足夠的初始值設定項,您需要明確提供大小。編譯時數組將不會神奇地根據使用情況進行擴展。您必須預先確定尺寸,或者通過明確提及它或通過使用足夠數量的initalizer元素初始化它。

在這裏,像

unsigned char caeser[100] = {0}; 

會爲你做的工作。

相關問題