问题描述
typedef union element
{
float f;
int i;
long l;
char c;
char *s;
} element;
typedef struct Array
{
int capacity;
int original_capacity;
int count;
element *elements;
} Array;
我的代码有效,没有错误!我可以附加到数组或在索引处插入它,很快我就能做更多的事情。我还可以使用 arr_print 函数打印出整个数组:
int main(void){
Array *arr = create_array(7);
arr_print(arr);
arr_append(arr,new_element_s("String 1"));
arr_print(arr);
arr_insert(arr,new_element_s("String2"),0);
arr_insert(arr,new_element_s("add"),0);
arr_print(arr);
}
控制台:
Array count 3 and capacity 7
[add,String2,String 1]
问题是我只能在联合是单一类型的情况下打印出整个数组,并且我希望能够扩展此功能。
这是 arr_print 函数:
void arr_print(Array *arr)
{
printf("Array count %d and capacity %d\n",arr->count,arr->capacity);
printf("[");
for (int i = 0; i < arr->count; i++) //
{
printf("%s",arr->elements[i].s); // SEG FAULT IF MISMATCHED.
if (i != arr->count - 1)
{
printf(",");
}
}
printf("]\n");
}
如果类型不匹配,printf 会导致段错误。
例如,如果我添加这些行:
arr_insert(arr,new_element_c('a'),1);
arr_insert(arr,new_element_i(1),1);
arr_print(arr); // This breaks
所以,我正在寻找某种方法来告诉联合包含的数据类型(然后使用开关或其他东西)。在伪代码中,我可能会做这样的事情
// typeof(arr->elements[i].data) == 'string' ? printf("%s",arr->elements[i].data)
// typeof(arr->elements[i].data) == 'int' ? printf("%d",arr->elements[i].data)
如果没有本地方式,是否有我可以编写的函数可以解析数据/推断它是什么,或者是否有一些库可以做到这一点?或者这只是你应该知道的事情?我想我可以用一个告诉类型的字段为联合制作一个结构包装器,但如果我不需要,我不想这样做。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)