【问题标题】:Default command line arguments in CC 中的默认命令行参数
【发布时间】:2010-12-28 19:14:59
【问题描述】:

$ ./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);}

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

当用户没有在 x 处输入参数时,如何使 argv[x] = "Null"?

【问题讨论】:

    标签: c command-line-arguments


    【解决方案1】:

    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);
    }
    

    【讨论】:

    • “CRT 不会为您未收到的参数插入 NULL 条目”:但是,请注意,在 argv 的最后一个有效元素之后,总是有一个元素包含 NULL,即 @ 987654324@。 (这显然只是吹毛求疵,我实际上赞成你)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您的问题是 argc

      【讨论】:

        【解决方案4】:

        您需要 4 个参数。为什么不这样陷害它:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-16
          • 1970-01-01
          • 2012-10-13
          • 2019-06-19
          • 2015-01-12
          • 2012-06-27
          • 2013-04-25
          • 2014-09-21
          相关资源
          最近更新 更多