下面的问题怎样改,请大家帮忙,我刚开始学,有些问题弄不明白

void BianMa(MyHuffmanNode MHN[],MyHuffmanNode* bm,int n)
{
    int start, c, p;  
    char *ch;  
    ch=(char *)malloc( n*sizeof(char) );  
    ch[n-1]='\0';  

    for(int i=1; i<=n; i++)//n个叶子节点  
    {  
        start=n-1;  
        c=i, p=MHN[i].father; //p为parent, c为child  

        while(p!=0)  
        {  
            start--;  
            if(MHN[p].lchild==c)  
                ch[start]='0';  
            else  
                ch[start]='1';  

            c=p; p=MHN[p].father;    //printf("\n123\n");  
        }  

        strcpy(MyHuffmanNode* bm->copy[i-1], &ch[start] );       
    }  
    free(ch);  

}  

strcy这里有错误怎么改啊,对数组的使用不太熟悉
错误信息: error: expected primary-expression before '*' token
请大家帮帮忙

strcpy是将字符串从一个字符串数组复制到另一个字符串数组。而不是将字符数组某个元素复制到另一个数组。传入的参数应该是目标数组的首地址个源数组的首地址。& ch[start]是某个元素的地址吧?关键是ch[start]之后的元素有没有0/?如果没有,那么复制是无法结束的。事实上,像strcpy等字符串操作函数,是从数组某个位置开始(可以不是首地址),直到遇到"0/"结束。如果数组没有"0/"那么就会出错。

strcpy 里面的MYhuffman*bm是什么东西?strcpy的参数应该是地址,而不是定义一个变量。Myhuffman*bm语句是定义一个Myhuffman类型的指针变量bm的意思。事实上bm已经通过函数的参数传递进来了,可以直接用。bm->copy[i-1]不就可以了吗。

再说一句,strcpy里面的的那个copy[i-1]是什么意思呢?是指copy. 数组的某个元素吗?如果是的的话,那还得这样写&bm->copy[i-1]表示取某个元素的地址。