【问题标题】:Is there a way to limit the number of command line arguments?有没有办法限制命令行参数的数量?
【发布时间】:2019-11-27 17:54:38
【问题描述】:

我正在尝试在 C 中执行命令“echo”。

我希望将命令“echo”之后的整个句子读入命令行中的 argv[1],而不是将每个单词作为单独的参数传递。

这在 C 中可能吗?

【问题讨论】:

  • 这与C语言无关。 shell 创建参数列表。换句话说,不是不可能。
  • 您可以使用循环并使用 strncat 系统调用将它们收集到一个字符串中。
  • 或者你可以像myecho "hello world"这样调用你的程序,然后"hello world"将被shell视为一个参数,在你的C程序中argv[1]将指向"hello world"。但这又是一个空壳。
  • 所以如果参数在“...”之间,它被认为是单个参数?
  • @ShiviBarlev 是的,但这与 C 无关,shell 正在这样做。

标签: c bash echo argv argc


【解决方案1】:

您不能直接执行此操作,因为 shell 甚至在您的程序启动之前就已拆分参数。

也许你想要这样的东西:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char sentence[500] = { 0 };

  for (int i = 1; i < argc; i++)
  {
    strcat(sentence, argv[i]);
    if (i < argc - 1)
      strcat(sentence, " ");
  }

  printf("sentence = \"%s\"", sentence);
}

免责声明:为简洁起见,没有进行边界检查。

调用示例:

> myecho Hello World 1 2 3
sentence = "Hello World 1 2 3"

【讨论】:

    【解决方案2】:

    您可以使用argc 循环遍历argv 的每个元素,以确保您不会读得太深。
    您也可以要求启动您的程序:./myProgram "Here is my nice sentence"

    【讨论】:

    • 谢谢!我可能会做你说的第二件事。
    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 2012-09-13
    • 2018-08-26
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2012-02-25
    • 2021-02-02
    相关资源
    最近更新 更多