我有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*/
但是我得到了这些错误:
我做错了什么? 谢谢
答案 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);
}