在 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的主要内容,如果未能解决你的问题,请参考以下文章

用 std::vector<std::string> 替换命令行参数 int argc 和 char** argv

H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持

char* argv[] 如何在 c/c++ 中工作? [复制]

C++ - char** argv 与 char* argv[]

*。*在C中的argv [1]中

指向 char 指针数组的指针与指向 char 指针的指针(或 char** argv 与 char* (*argv)[])