0

次のように宣言された2つのポインターがあります。

void *arr1,*arr2;

これら 2 つのポインターにメモリを動的に割り当ててから、それらへの入力をスキャンします。たとえば、最初のものについては、これを行います:

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 に答える