我必须将一个标记数组传递给一个处理线程创建的函数。为此,我使用的是函数可以采用额外的void *aux
参数。
该函数(只有最后一个参数与我的问题相关):
tid_t
thread_create (const char *name, int priority,
thread_func *function, void *aux);
我使用此数组存储指向字符串标记的指针:
char *argv[];
这就是我传递参数的方式(最后一个是相关的):
thread_create (file_name, PRI_DEFAULT, start_process, argv);
但是,当我尝试转换回来时
char *argv[] = aux;
我收到以下消息:
error: invalid initialiser
有没有办法通过void参数传递一个字符串指针数组?
答案 0 :(得分:2)
您正尝试分配给可变长度数组:
char *argv[] = aux; /* wont compile! */
相反,将变量声明为char**
:
char **argv = aux;
答案 1 :(得分:1)
数组在传递给函数时会衰减到指针,所以只需执行:
char ** argv = aux;
要获得aux
引用的数组的副本,请执行以下操作:
char ** ppc = aux;
while (*ppc)
{
++ppc;
}
char * argv[ppc - ((char **) aux) + 1] = {NULL};
while (ppc > ((char **) aux)
{
argv[ppc - ((char **) aux) - 1] = *ppc;
--ppc;
}
上述解决方案需要VGA,可从C99开始使用。