【问题标题】:Hardcoding or substituting char **argv in C在 C 中硬编码或替换 char **argv
【发布时间】: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++。

标签: c arrays string pointers main


【解决方案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 做一些技巧来让编译器弄清楚。
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多