东莞吴彦祖 发表于 2020-7-8 09:25:51

求助!想知道为什么这段代码运行的时候总是显示Segmentation fault。

这段代码在argv的位置应输入的是数字,但是每次运行的时候,比如./ caesar 2,就会显示Segmentation fault。豪无头绪,请大神帮忙!


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

int main(int argc, string argv[])
{
   if (argc == 2 && isdigit(argv))
   {
         int key = atoi(argv);
         string plaintext = get_string("plaintext: ");
         printf("ciphertext: ");
         for (int i = 0, len = strlen(plaintext); i < len; i++)
         {
             char c = plaintext;
            
             if (isalpha(c))
             {
               if (islower(c))
               {
                     printf("%c", (((c - 97) + key) % 26) + 97);
                     
               }
               if (isupper(c))
               {
                     printf("%c", (((c - 65) + key) % 26) + 65);
                     
               }
               else
               {
                     printf("%c", c);
                     
               }
             }
         }
         return 0;
   }
   else
   {
         printf("Usage: ./caesar key\n");
   return 1;
   }
}

赚小钱 发表于 2020-7-8 09:38:00

get_string
是什么,不记得有这个库函数。

segmentation fault 通常都是修改非法地址导致的。
页: [1]
查看完整版本: 求助!想知道为什么这段代码运行的时候总是显示Segmentation fault。