我有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。有人可以暗示这是如何正确完成的吗?
答案 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()
调用释放整个数组(和字符串)。