如果 argc 仅采用一个参数,则会出现分段错误。当 IF 在 WHILE 之前时,这不会发生

Segmentation fault error if argc takes only one argument. This does'nt happen when the IF is before WHILE

检查用户是否提供任何命令行参数,或更多,它打印用法:./caesar key。如果命令行参数是一个,那么它会检查字符串中的所有字符是否都是数字。如果我在命令行中输入 ./caesar,我会收到分段错误。如果 IF 在 WHILE 之前,则不会发生这种情况。我不确定为什么会出现此错误。非常感谢任何帮助!

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

   int main(int argc, char*argv[])
   {
    string str = argv[1];
    
  //check if argv[1] are all digits
    while(argc == 2)
    {
      for(int i = 0; i< strlen(str); i++)
       {
          if(!isdigit(str[i]))
          {
             printf("Usage: ./caesar key \n");
             break;
          }
       }
        break;
    }
    
   // check if argument count is not 2
   if(argc != 2)
    {
       printf("Usage: ./caesar key \n");
    }
   
   return 0;

   }

./casearargv[0] 意思是 string str = argv[1]; 是空的,导致段错误。