我有一个函数,它接受一个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***
. 我尝试了这个并忽略了警告,它工作正常。但这安全吗?有没有更优雅的选择?