2015-08-15 80 views
0

我正在爲cs50做pset,並且無論我做什麼,都會顯示分段錯誤。顯示分段錯誤(核心轉儲)vigenere密碼

我試過各種東西,但它一直顯示同樣的事情。

這是我試圖實現的vigenere密碼的代碼。

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

int main(int argc,string argv[]){ 

if(argc == 2){ 

//check if text 
if(isalpha(argv[1])){ 

//key 
string num = argv[1]; 
int num_length = strlen(num); 

//convert key to lower for easier stuff,dont want to repeat for higher too 
for(int i = 0;i < num_length;i++){ 

    if(isupper(num[i])){ 
    num[i]= tolower(num[i]); 
    } 

} 

//ask for name 
printf("Line to be encoded please :- \n"); 
string name = GetString(); 

//main stuff 
for(int i=0,n = strlen(name);i < n;i++){ 

    if(isupper(name[i])){ 

    //key part 
    int keyu = (num[i] - 97) % num_length; 

    //converting to alphabetical index 
    int alpha_name_upper = name[i] - 65; 

    //encoding 
    int encoded_upper = (alpha_name_upper + keyu) % 26; 

    //converting back to ascii index 
    name[i] = encoded_upper + 65; 

    } 

    if(islower(name[i])){ 

    int keyl = (num[i] - 97) % num_length; 

    int alpha_name = name[i] - 97; 
    int encoded_lower = (alpha_name + keyl) % 26; 

    name[i] = encoded_lower + 97; 

    } 

    } 

    printf("Encoded line :- %s \n",name); 

} 
}else{ 

return 1; 

} 
} 

回答

1

這種不斷顯示分段錯誤,無論我做什麼

不幸的是,你並沒有告訴我們什麼是<cs50.h>裏面,也沒有什麼string是,也沒有什麼GetString()一樣。

如果我們假設stringchar*一個typedef(有意義的唯一的事情),那麼這行:

if(isalpha(argv[1])){ 

不應該編譯,因爲在char*調用isalpha是沒有意義的。

反正你有一個核心轉儲,你應該做的第一件事就是建立與調試信息(與-g選項)中的程序,並在調試器(如gdb)運行它。這會告訴你程序的哪一行崩潰。

如果您在支持valgrind的平臺(如Linux)上運行,則應該在valgrind下運行該程序,並且它通常會告訴您確切地說您的程序出了什麼問題。

+0

是的,你是對的,一旦我刪除了這行代碼,它編譯。無論如何謝謝。 – Jedi18