2014-01-23 39 views
-1

我是編程新手。這是迄今爲止我寫的代碼。忽視加密本身的細節;我知道這需要更多的工作。當我嘗試運行該程序時,出現分段錯誤錯誤消息。如果argc != 2我會得到消息,如果argc == 2它打印出「關鍵字」,但它顯示相同的消息,並沒有完成程序,所以我認爲這個錯誤與引用argv [1]有關。我的Vigenere加密程序中的分段錯誤

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

int main (int argc, string argv[]) 
{ 
    int i = 0, n = strlen(argv[1]); 
    char KeyWord[i]; 

    //makes sure command line has 2 arguements 
    if (2 != argc) 

     printf("argc != 2. Try again\n"); 
     return 1; 


    //stores argv[1] as key 
    for (i = 0; i < n; i++) 
    { 
     KeyWord[i] = argv[1][i]; //malloc 
     printf("%c", KeyWord[i]); 
    } 
    printf("\n"); 

    if (isalpha(KeyWord)) 
     return 0; 
    else 
    { 
     printf("try again"); 
     return 1; 
    } 

     int j, length; 

    printf("input data: "); 
    string message = GetString(); 

    for (i = 0; i < n; i++) 
    { 
     for (j = 0, length = strlen(message); j < length; j++) 
     { 
      if (islower(message[j])) 
      message[j] = message[j] -97 + KeyWord[i]; 

      if (isupper(message[j])) 
      message[j] = message[j] -65 + KeyWord[i]; 
     } 
     if (i==n) i = 0; 
     } 
} 
+0

'字符串的argv []'這是什麼? –

+0

''提供'typedef char * string;' - 這就是'string argv []'的意思。 –

回答

0

不能確保argc == 2之前的n初始化計算strlen(argv[1])

另外,char KeyWord[i]是錯誤的:因爲i爲0,您沒有爲任何東西分配空間。這應該至少在編譯時產生一個警告,因爲數組大小必須大於0.如果你想要動態分配,你的評論建議,你應該在計算字符串長度後使用malloc

的代碼應該是:

int i = 0, n; 
char *KeyWord; 

// make sure command line has 2 arguments 
if (2 != argc) 
{ 
    printf("argc != 2. Try again\n"); 
    return 1; 
} 
n = strlen(argv[1]); 
KeyWord = malloc(n+1); 
/* ... */