【发布时间】:2016-02-19 05:45:32
【问题描述】:
我有以下代码:
#include <stdio.h>
int main(int argc, char* argv[]){
int a = argv[1]?atoi(argv[1]):10;
int b = argv[2]?atoi(argv[2]):20;
printf("a = %d, b = %d\n", a, b);
return 0;
}
如果我不提供任何命令行输入,“a”和“b”中的值
应该分别为 10 和 20,但实际上“a”的值为 10,而“b”的值为 0。
我不明白为什么会这样,因为我做的完全一样
在这两种情况下。
谢谢。
【问题讨论】:
-
因为您正在调用未定义的行为。如果未提供命令行参数,则代码不得访问那些
arg条目。在这种情况下,不能保证它们都为 NULL。只有argv[argc]被 C 标准定义为 NULL。 -
在第三和第四行,尝试将
argv[1]和argv[2]更改为(argc>1)和(argc>2) -
我尝试检查 argv[1] 和 argv[2] 是否为空,结果 argv[2] 不为空,即使我没有在命令行上提供任何输入。谢谢。
标签: c command-line