【问题标题】:How to make an argument array of strings in c如何在c中制作字符串的参数数组
【发布时间】:2014-01-29 06:33:30
【问题描述】:

我有一个浮点数array x(可变长度n),我想使用execl() 将其作为命令行参数传递给shell 脚本。我想我需要声明一个指向char array **args[] 的指针,然后动态分配它以使其具有n 的长度,然后执行以下操作:

 *args=malloc(n*sizeof(char[]);
    for(i=0;i<n;i++) sprintf( args[i] , "%f", x[i]);  
    execl("script.sh","script.sh", args, NULL);

但是,我无法正确分配 args。有人可以提示一下这是如何正确完成的吗?

【问题讨论】:

    标签: c arrays shell dynamic-memory-allocation


    【解决方案1】:

    您需要为字符指针数组(您要传递给execv())、字符本身分配空间。注意这里不能使用execl(),需要使用基于数组的,比如execv()

    char ** build_argv(const char *cmd, const float *x, size_t num)
    {
      char **args, *put;
      size_t i;
    
      /* Allow at most 64 chars per argument. */
      args = malloc((2 + num) * sizeof *args + num * 64);
      args[0] = cmd;
      put = args + num; /* Initialize to first character after array. */
      for(i = 0; i < num; ++i)
      {
        args[1 + i] = put;
        put += snprintf(put, "%f", x[i]);
      }
      args[1 + num] = NULL; /* Terminate array. */
      return args;
    }
    

    上面应该可以工作,它构建了一个NULL-终止的字符串数组。您可以通过单个 free() 调用来释放整个数组(和字符串)。

    【讨论】:

    • 当然可以,但您只能在 10 分钟后接受答案 :-)
    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2018-04-12
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多