如何解决分段错误和 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()
被忽略而不是给我一个段错误?
感谢您花时间阅读这篇文章
解决方法
当您执行没有参数的程序时,argc
为 1
(因为程序名称本身算作一个参数),而 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。