如何在c中创建一个字符串的参数数组

时间:2014-01-10 10:21:46

标签: c arrays shell dynamic-memory-allocation

我有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。有人可以暗示这是如何正确完成的吗?

1 个答案:

答案 0 :(得分:4)

您需要为字符指针数组分配空间,这是您要传递给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()调用释放整个数组(和字符串)。