首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分割故障和isalpha

分割故障和isalpha
EN

Stack Overflow用户
提问于 2021-01-01 03:37:35
回答 1查看 60关注 0票数 0

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

但是,如果我使用的命令行参数少于2个,则仍然会发生Segmentation Fault,并且在If3条件中忽略isalpha()

代码语言:javascript
复制
#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()会被忽略,而不是给我一个seg错误?

感谢您抽出时间阅读这篇文章

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-01 03:57:38

在不带参数的情况下执行程序时,argc1 (因为程序名本身也算作arg),而argv[1]NULL

代码语言:javascript
复制
(argc > 2) || (argc < 1)   // Considers argc == 1 and argc == 2 acceptable

应该是

代码语言:javascript
复制
(argc > 2) || (argc < 2)    // Only considers argc == 2 acceptable

或者只是

代码语言:javascript
复制
argc != 2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65524966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档