Вы используете арифметику указателей для типа void*
, размер которого неизвестен.Вы должны привести указатель до , выполнив арифметику, но в любом случае использовать обозначение массива будет более понятно.
#include <stdio.h>
void print_array(void *arr, int length, int type){
int i = 0;
for(i=0;i<length;i++){
switch(type) {
case 0:
printf("int %d\n", ((int*)arr)[i]);
break;
case 1:
printf("char %c\n", ((char*)arr)[i]);
break;
case 2:
printf("string %s \n", ((char**)arr)[i]);
break;
case 3:
printf("hex %X\n", ((unsigned*)arr)[i]);
break;
default:
printf("Format not supported yet. %d \n",type);
return;
}
}
}
void test_int_array(){
int int_arr[3] = {0, 1, 2};
print_array(int_arr, 3, 0);
}
void test_char_array(){
char char_arr[3] = {'x', 'y', 'z'};
print_array(char_arr, 3, 1);
}
void test_str_array(){
char *str_arr[3] = {"one", "two", "three"};
print_array(str_arr, 3, 2);
}
void test_uns_array(){
unsigned uns_arr[3] = {26, 27, 28};
print_array(uns_arr, 3, 3);
}
int main(){
test_int_array();
test_char_array();
test_str_array();
test_uns_array();
return 0;
}
Вывод программы:
int 0
int 1
int 2
char x
char y
char z
string one
string two
string three
hex 1A
hex 1B
hex 1C