main(int argc, char *argv[]) {
int i = 0;
unsigned long long input = strtoull(argv[1],NULL,10);
if (argc < 2){
puts("Need an argument");
return 0;
}
}
任何人都可以解释为什么如果我只是在没有参数的cmd中输入程序名称,这段代码会崩溃吗?
编辑:
使用null参数,新代码仍会立即崩溃:
main(int argc, char *argv[]) {
if (argc > 2){
puts("Too many arguments");
return 0;
}
if (argc < 2){
puts("Need an argument");
return 0;
}
if(argv[1][0] == '-'){
puts("Sorry, no negative numbers, try another input"); // no negatives
return 0;
}
答案 0 :(得分:2)
在您测试退出之前,您正在使用argv[1]
。因此,在访问argc >= 2
argv[1]
答案 1 :(得分:1)
命令名称位于索引零处。您引用了超出范围的索引。
答案 2 :(得分:0)
您是否可以准确地扩展您在命令行中输入的内容以执行该程序?根据给出的信息,听起来您没有输入命令行参数。如果是这种情况,那么您在以下行中有一个空引用异常:
unsigned long long input = strtoull(argv[1],NULL,10);
可能的修改如下:
if(argc >= 2)
{
//Note argv is the second argument (zero indexing)
unsigned long long input = strtoull(argv[1],NULL,10);
}
基本上,不要尝试阅读argv [1]直到你知道它存在。
答案 3 :(得分:0)
至于您编辑的代码,您仍然试图在任何控制语句之外取消引用argv [1]。这将导致您的代码崩溃。在尝试使用之前,请确保存在argv [1]。
if(argc > 2)
{
if(argv[1]......)
}