C:Vigenere密码编译,但分段错误指针?
我在这段代码的某个地方发现了一个分段错误,尽管它编译成功了。代码是通过一个键反复迭代来加密一个明文字。我假设它与指针有关,但我不知道如何修复它 另外:这是表达isalpha的否定形式吗?它没有抛出错误。当我试图在它后面使用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
==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;如果对于给定的关键字和单词,输出应该是什么?