2015-08-15 3 views
0

Я делаю pset для cs50, и это продолжает показывать ошибку сегментации независимо от того, что я делаю.Отображение ошибки сегментации (сбрасывание ядра) vigenere cipher

Я пробовал разные вещи, но он продолжает показывать одно и то же.

Это код для шифрования 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() делает.

Если мы предположим, что string является ЬурейиМ для char* (единственного, что имеет смысл), то эта строка:

if(isalpha(argv[1])){ 

не следует обобщать, так как вызов isalpha на char* не имеет никакого смысла.

Во всяком случае, когда у вас есть дамп, самое первое вы должны сделать, это создать программу с отладочной информацией (с опцией -g) и запустить его под отладчиком (например, gdb). Это скажет вам, какая строка вашей программы терпит крах.

Если вы работаете на платформе (например, Linux), где поддерживается valgrind, вы должны запустить программу под valgrind, и она часто может сообщить вам точно, что не так с вашей программой.

+0

Да, вы правы, как только я удалил эту строку кода, она скомпилирована. В любом случае, благодарю Вас. – Jedi18

Смежные вопросы