C中的默认命令行参数

时间:2010-12-28 11:04:40

标签: c command-line-arguments

$ ./Main a

int main(int argc, char * argv[]) {
int i;
for(i=1;i<argc;i++){
    if(argv[i] == NULL){ //This line does not work!
        argv[i] = "Null";
    }
}
theMenu(argv[1], argv[2], argv[3], argv[4]);
return (EXIT_SUCCESS);}

在theMenu函数中,当我调用strcmp(argv [2],argv [3]);我将有分段错误:((

当用户未在x处输入参数时,如何使argv [x] =“Null”?

4 个答案:

答案 0 :(得分:4)

CRT不会为您未收到的参数插入NULL条目。它只会降低argc的值。如果必须有四个参数,那么可以在堆栈上定义自己的数组。

int main(int argc, char * argv[]) {
    char* args[4] = { 0 };
    int i;
    for(i=1;i<argc && i < 4;i++){
         args[i] = argv[i];
    }
    for(int i = 0; i < 4; i++) {
        if (args[i] == NULL)
            args[i] = "Null";
    }
    theMenu(argv[1], argv[2], argv[3], argv[4]);
    return (EXIT_SUCCESS);
}

答案 1 :(得分:2)

你做不到。你可以做的是定义你自己的大小[4]数组,初始化为空字符串或NULL,并复制参数(最多argc计数)。

答案 2 :(得分:1)

你期待4个论点。为什么不像这样陷阱:

if (argc==5)
{
//code here
}

(它是5,因为运行代码时有一个arg [0])

答案 3 :(得分:1)

你的问题是argc&lt; 5所以你试图访问未定义的argv元素。