将char指针数组转换为void指针然后转换回来

时间:2014-03-02 11:57:35

标签: c arrays pointers initialization

我必须将一个标记数组传递给一个处理线程创建的函数。为此,我使用的是函数可以采用额外的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参数传递一个字符串指针数组?

2 个答案:

答案 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开始使用。