分段错误和 isalpha

问题描述

我想在使用命令行参数和 isalpha() 时澄清我对分段错误的理解,但这种特殊情况让我更加困惑。 因此,我按照 this SO answer 的建议将 argv[1] 声明为 char * 作为绕过它的方法。

但是,如果我使用的命令行参数少于 2 个,Segmentation Fault 仍然会出现,并且 isalpha() 在 if 3rd 条件中被忽略

#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h> //atoi is here

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


    char *input = argv[1];
    // Error handling
    if ((argc > 2) || (argc < 1) || (isalpha(input[1])))
    {
        printf("Unwanted input\n");
        return 1;
    }
   
    return 0;

}

为什么我在不使用命令行参数时得到 undefined behaviour,然后为什么 isalpha() 被忽略而不是给我一个段错误?

感谢您花时间阅读这篇文章

解决方法

当您执行没有参数的程序时,argc1(因为程序名称本身算作一个参数),而 argv[1]NULL。>

(argc > 2) || (argc < 1)   // Considers argc == 1 and argc == 2 acceptable

应该

(argc > 2) || (argc < 2)    // Only considers argc == 2 acceptable

或者只是

argc != 2

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...