在 C 中硬编码或替换 char **argv

Posted

技术标签:

【中文标题】在 C 中硬编码或替换 char **argv【英文标题】:Hardcoding or substituting char **argv in C 【发布时间】:2018-07-18 10:26:00 【问题描述】:

我知道这样做会被认为是愚蠢的,但我正在尝试对命令行参数进行硬编码,而不是仅出于测试目的而修改一大堆代码。

现有的主要功能如下:

int main(int argc, char **argv) 
    Run run(argc, argv);

    return run.exec();

我想硬编码参数...所以这意味着将新指针传递给指针(因为这是 run 函数所采用的)或重写 argv?

我试图传递的数据...

    char *config[] = 
         " --user=temp"
         " --name=Joe"
         " --id=20"
    ;   

什么是最安全和最“正确”的低音确认方式来做到这一点? 我还希望数组大小是动态的,因此在调用函数时不必手动定义 argc。

我是指针和 C 的新手,所以欢迎任何帮助!

【问题讨论】:

编辑您的问题以包括 IDE、OS 等,因为答案取决于这些 如果你打算使用exec*-family,你的argv变量中的最后一个元素应该是NULL,别忘了。 @stackptr IDE、操作系统等与什么有什么关系? @Rob 大多数 IDE 都有一个对话框,您可以在其中输入命令行参数的内容。每个 IDE 都有不同的实现方式 Run run(argc, argv); 是 C 吗?看起来像 C++。 【参考方案1】:

这只是一个“字符串数组”:

char *my_argv[] = 
     "myprogram", // most programs will ignore this
     "--user=temp",
     "--name=Joe",
     "--id=20",
     NULL
;
Run run(4, my_argv);
return run.exec();

不要忘记程序名称本身也算作一个参数,并且在最后一个之后应该有一个 NULL。

例如,如果您不想硬编码程序名称,当然可以将"myprogram" 更改为argv[0]

【讨论】:

谢谢。我不是 NULL 终止数组,所以感谢初学者。我会只使用 sizeof 来确定 argc 吗? @user2815333 好吧,您知道参数的数量,因此您可以...使用该数字。但是是的,您可以使用 sizeof 做一些技巧来让编译器弄清楚。

以上是关于在 C 中硬编码或替换 char **argv的主要内容,如果未能解决你的问题,请参考以下文章