C言語　ポインタ　領域確保


下記は自分のプログラムなのですがどうしても実行結果がうまくいきません。  
for文かmallocのどちらかがおかしいと思うんですが分かりません。

**問題:**

> キーボードから空白類を含まない 32bytes 未満の文字列を 1
> つ入力すると、その文字列の各文字を2つずつに増やした新しい文字列を入れる領域をmallocで確保し新しい文字列を入れ、表示した後メモリを解放して終了するプログラムを作成せよ。
>
> 例："abc" → "aabbcc"

**現状のプログラム**

[code]

    #include<stdio.h>
    #include<stdlib.h>
    #include <string.h> 
    
    int main(void){
    
      char *p,q[32];
      int i,k,j;
    
      printf("Input MOZI:");
      scanf("%s",q);
    
      i=strlen(q);
    
      p=(char *)malloc(sizeof(char)* i * 2);
      if(p == NULL){exit(1);}
    
       printf("%d\n",i);
    
      for(k=0;k<i;k++){
        for(j=0;j<2;j++){
       *p=*q;
       *p++;
        }
      j=0;
      ++*q;
    
      }
      printf("%s\n",p);
      printf("%s\n",q);
    
      free(p);
    
    }
    
[/code]




*p++と++*qをp++と++qに変えてみて下さい。  
ポインタを進めたいのであって、中身を変えたいわけではありませんよね？  
*を使うとポインタの指す中身が参照されます。  
ちなみに厳密にいえば、*よりも++が優先されるはずなので、*p++は問題ありません。が、紛らわしいのでアスタリスクは外したほうがいいと思われます。

