C:Vigenere密码编译,但分段错误指针?

C:Vigenere密码编译,但分段错误指针?,c,segmentation-fault,vigenere,C,Segmentation Fault,Vigenere,我在这段代码的某个地方发现了一个分段错误,尽管它编译成功了。代码是通过一个键反复迭代来加密一个明文字。我假设它与指针有关,但我不知道如何修复它 另外:这是表达isalpha的否定形式吗?它没有抛出错误。当我试图在它后面使用==FALSE时,它确实抛出了一个错误 int main(int argc, char* argv[]) { if ((argc<2) || (argc>2) || (!isalpha(argv)))//exits if non-alpha key or

我在这段代码的某个地方发现了一个分段错误,尽管它编译成功了。代码是通过一个键反复迭代来加密一个明文字。我假设它与指针有关,但我不知道如何修复它

另外:这是表达isalpha的否定形式吗?它没有抛出错误。当我试图在它后面使用
==FALSE时,它确实抛出了一个错误

int main(int argc, char* argv[]) 
{

    if ((argc<2) || (argc>2) || (!isalpha(argv)))//exits if non-alpha key or < or > than 2 command line inputs 
    {
        printf("Please enter your single word key"); //prompts for appropriate key
        return 1; 
    }

    if(argc==2) // requires two command line inputs with non-integer key to continue
    {
        printf("plaintext:");      //Printed on terminal before word to be enciphered 
        char* word = GetString();  //Prompts user to enter word required to be enciphered

        printf("ciphertext:");   

    char* key = (argv[1]);  //key = initial user command line entry   


    int i = 0;  
    int k = 0;     //defines characters in key   

    for(i=0; i<strlen(word); i++)    //iterates through word entered by user as plaintext
    {   

        if(isalpha(key[k]))
        {

            if(isupper(word[i]))    //if original characters are uppercase 
            {
                int cipher = (word[i] + key[k] -65) % 26 + 65; 
                printf("%c", cipher);

            }
            else if(islower(word[i]))  //if original characters are lowercase
            {
                int cipher = (word[i] + key[k] - 97) % 26 + 97; 
                printf("%c", cipher);
            }        
            else    //for all other types of characters
            {
                printf("%c", word[i]); 
            } 

        }    
        else if(!isalpha(key[k]))
        {
            return 1;
        }


        if (word[i]==strlen(word)) //if reaches end of plaintext word
        {
            printf("\n");   //print a new line and exit
            return 1;      
        }    

        else if(word[i]<strlen(word))  //if haven't reached end of word, increment k 
        {
            k++;
        }    

        if (key[k]==strlen(key))
        {
            k = 0;
        }    

    }
    printf("\n"); 

    }

}    
intmain(intargc,char*argv[])
{
if((argc2)| |(!isalpha(argv))//如果非alpha键或小于或>2个命令行输入,则退出
{
printf(“请输入您的单字键”);//提示输入适当的键
返回1;
}
if(argc==2)//需要两个具有非整数键的命令行输入才能继续
{
printf(“明文:”;//在要加密的字之前打印在终端上
char*word=GetString();//提示用户输入需要加密的单词
printf(“密文:”);
char*key=(argv[1]);//key=初始用户命令行条目
int i=0;
int k=0;//定义键中的字符

对于(i=0;i
!isalpha(argv)
==>
!isalpha(argv[1][0])
。请启用编译器警告并将其全部处理。另外,如果(argc==2)
是重言式:您已经知道了。每当您有一个程序出现故障时,请尝试
word[i]==strlen(word)
…比较字符串和字母的长度是没有意义的。如果这意味着
i==stelen(word)
,那么在
for(i=0;如果对于给定的关键字和单词,输出应该是什么?
!isalpha(argv)
=>
!isalpha(argv[1][0])
。请启用编译器警告并将其全部处理。另外
如果(argc==2)
是重言式:您已经知道了。每当您的程序出现故障时,请尝试
word[i]==strlen(word)
…比较字符串和字母的长度是没有意义的。如果这意味着
i==stelen(word)
,这在
for(i=0;如果对于给定的关键字和单词,输出应该是什么?