2010-07-09 36 views
0
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])); 

由於某種原因,我得到分配輸出問題上無效**

分配(應該是AA)

以下100 166696(應爲100 100)

+0

這是真碼嗎?代碼中至少有一個錯誤,它甚至不應該按原樣編譯。 – 2010-07-09 07:10:41

+0

a0 = malloc(sizeof(char *)); 真的嗎? :) – claf 2010-07-09 07:12:37

回答

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])); 
0

當你把地址a0a1填入args時,你會得到一個雙指針。當你計算你的輸出時,你只需解除引用一次。有兩種方法可以解決這個問題,以獲得您想要的輸出。您可以更改

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

args[0]=(void *)a0; 

,改變

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

args[1]=(void *)a1; 

使args包含單指針,您可以更改

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