无效问题**

时间:2010-07-09 07:01:39

标签: c

int size=2;
char *a0;
char **allargs;
short *a1;
void **args;
allargs=(char **)malloc(size*sizeof(char *));
allargs[0]="a";
allargs[1]="100";
args=(void **)malloc(size*sizeof(void *));

a0 = malloc(sizeof(char *));
*a0=(*allargs[0]);
args[0]=(void *)&a0;
fprintf(stderr,"assigned %c %c\n",*a0,*((char *)args[0]));

a1 = malloc(sizeof(short *));
*a1=atoi(allargs[1]);
args[1]=(void *)&a1;
fprintf(stderr,"assigned %d %d \n",*a1,*((int *)args[1]));

由于某种原因,我得到以下输出

指定了(应该是a)

分配100 166696(应为100 100)

2 个答案:

答案 0 :(得分:1)

你应该将args [0]和args [1]转换为char **和int **。

fprintf(stderr,"assigned %c %c\n",*a0,**((char **)args[0]));
fprintf(stderr,"assigned %d %d \n",*a1,**((int **)args[1]));

答案 1 :(得分:0)

当您使用a0a1的地址填写args时,您将获得双指针。计算输出时,您只需取消引用一次。有两种方法可以解决此问题以获得所需的输出。你可以改变

args[0]=(void *)&a0;

args[0]=(void *)a0;

并更改

args[1]=(void *)&a1;

args[1]=(void *)a1;

以便args包含单个指针, OR 可以更改

fprintf(stderr,"assigned %c %c\n",*a0,*((char *)args[0]));

fprintf(stderr,"assigned %c %c\n",*a0,**((char **)args[0]));

并更改

fprintf(stderr,"assigned %d %d \n",*a1,*((int *)args[1]));

fprintf(stderr,"assigned %d %d \n",*a1,**((int **)args[1]));

在显示期间双重取消引用args