我有一个函数,它接受一个void**参数和一个指示其数据类型的整数
void foo (void** values, int datatype)
在函数内部,根据数据类型,我以这种方式对其进行 malloc:
if (datatype == 1)
    *values = (int*) malloc (5 * sizeof(int));
else if (datatype == 2)
    *values = (float*) malloc (5 * sizeof(float));
到目前为止一切都很好。然而,当字符串出现时,事情就变得复杂了。void**需要是void***,因为我需要做这样的事情:
*values = (char**) malloc (5 * sizeof(char*));
for(i=0;i<5;i++)
    (*values)[i] = (char*) malloc (10);
..
strncpy( (*values)[0], "hello", 5);
这种情况应该如何处理?我可以将 a 传递char***给期望 avoid**但在其中正确转换的函数吗?
void foo (void** values, int datatype) {
if(datatype == 3) {
    char*** tmp_vals = (char***) values;
    *tmp_vals = (char**) malloc (5 * sizeof(char*));
    ...
    (*tmp_vals)[i] = (char*) malloc (10 * sizeof(char));
    strncpy (  (*tmp_vals)[i], "hello", 5);
}
所以我只是将其void**转换为char***. 我尝试了这个并忽略了警告,它工作正常。但这安全吗?有没有更优雅的选择?