如何将项目扫描到void *数组?

时间:2013-06-01 18:26:09

标签: c pointers scanf void

我有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*/

但是我得到了这些错误:

errors

我做错了什么? 谢谢

2 个答案:

答案 0 :(得分:4)

如果你正在尝试做我认为你想做的事情,你最好定义一个联合,然后用它来定义变量用法。

#include <stdio.h>
#include <stdlib.h>

typedef union s
{
    int d;
    char c;
    float f;
}multi;

int main()
{
    multi *p;
    int len;
    char type;
    int loop;
    printf("Enter the type::\t");
    scanf("%c",&type);
    printf("Enter the length::\t");
    scanf("%d",&len);
    if(type == 'i')
    {
        p = malloc (sizeof(multi) * len);
        for(loop=0;loop<len;loop++)
        {
            scanf("%d",&p[loop].d);
        }
        printf("Values::\n");
        for(loop=0;loop<len;loop++)
        {
            printf("%d\n",p[loop].d);
        }
    }
    else if (type == 'f')
    {

        p = malloc (sizeof(multi) * len);
        for(loop=0;loop<len;loop++)
        {
            scanf("%f",&p[loop].f);
        }
        printf("Values::\n");
        for(loop=0;loop<len;loop++)
        {
            printf("%f\n",p[loop].f);
        }
    }
    else if (type == 'c')
    {

        p = malloc (sizeof(multi) * len);
        for(loop=0;loop<len;loop++)
        {
            scanf("%c",&p[loop].c);
        }
        printf("Values::\n");
        for(loop=0;loop<len;loop++)
        {
            printf("%c\n",p[loop].c);
        }
    }
    else
    {
        printf("\nNot a valid type!\n");
    }
    free(p);
    return 0;
}

原因在于,通过联合,额外的空间不会浪费,而您可以获得灵活性  使用指针访问变量。不建议投射malloc()类型

答案 1 :(得分:0)

更改为

if(typ == 'i')
{
    arr1 = malloc(len1 * sizeof(int));
    for(i=0 ; i < len1 ; i++)
        scanf(" %d", (int*)arr1 + i);
}
if(typ == 'f')
{
    arr1 = malloc(len1 * sizeof(float));
    for(i=0 ; i < len1 ; i++)
        scanf(" %f", (float*)arr1 +i);
}
if(typ == 'c')
{
    arr1 = malloc(len1 * sizeof(char));
    for(i=0 ; i < len1 ; i++)
        scanf(" %c", (char*)arr1 +i);
}