c-分段故障和isalpha



我想在使用命令行参数和isalpha()时澄清我对Segmentation错误的理解,但这种特殊情况更让我困惑。因此,我将argv[1]声明为char *,作为一种绕过它的方法,正如这个So答案所建议的那样。

但是,如果我使用的命令行参数少于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 inputn");
return 1;
}

return 0;
}

为什么我在不使用命令行参数时会得到未定义的行为,为什么isalpha()会被忽略而不是给我一个seg错误?

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

当执行不带参数的程序时,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

相关内容

  • 没有找到相关文章

最新更新