0

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

但我得到这些错误:

错误

我究竟做错了什么?谢谢

4

2 回答 2

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()类型

于 2013-06-01T18:54:57.830 回答
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);
}
于 2013-06-02T08:53:08.387 回答