【发布时间】:2013-06-01 18:26:08
【问题描述】:
我有 2 个这样声明的指针:
void *arr1,*arr2;
我将为这两个指针动态分配内存,然后扫描它们的一些输入。 例如,对于第一个我这样做:
scanf("%c",&typ);
scanf("%d",&len1);
用户输入输入的类型,以及他希望“数组”的大小。 我的问题是如何使用 scanf 函数将项目扫描到这些数组中。 我试过这个:
/*scan 1st array items*/
if(typ == 'i')
{
arr1 = (int*)malloc(len1 * sizeof(int));
for(i=0 ; i < len1 ; i++)
scanf("%d",arr1[i]);
}
if(typ == 'f')
{
arr1 = (float*)malloc(len1 * sizeof(float));
for(i=0 ; i < len1 ; i++)
scanf("%f",arr1[i]);
}
if(typ == 'c')
{
arr1 = (char*)malloc(len1 * sizeof(char));
for(i=0 ; i < len1 ; i++)
scanf("%c",arr1[i]);
}
/*end scanning 1st array*/
但我得到了这些错误:
我做错了什么? 谢谢
【问题讨论】:
-
请发布文字,而不是文字图片...
-
您的 scanf("..", arr1[i]) 爆炸了,因为您无法索引到 void 的“数组”。想想
arr1[i]相当于arr1 + i * sizeof(void)。但是sizeof(void)到底是什么?这种说法没有任何意义。 -
@djf 你是对的。对于第一个 if 条件,
scanf("%d",arr1+i*sizeof(int));怎么样?为什么它不起作用? -
You can't do pointer arithmetic on a void pointer。您必须将整个内容转换为 (int*),然后对其进行索引,最后将指针传递给 scanf。像 &(((int*)arr1)[i])... 之类的东西……但那太混乱了——即使谈论它我也觉得很脏阻止