0

構造体に 5 つの場所を割り当てました。ここで、各 CELL は構造体へのポインターです。たとえば、2番目のセルが構造体を指すようにしたいのですが、エラーが発生します:式は変更可能な値でなければなりません。ポインターを再配置しているという点はわかりますが、すべての値をコピーせずに修正する方法がわかりません。

これが私が使用している例です:(関連するもの)

    typedef struct childrenArray
{
    PXML_ELEMENT    childrenArray;
     UINT32         numOfChildren;
     UINT32         maxNumOfChildren;
 }CHILDREN_ARR,*PCHILDREN_ARR;




 typedef struct xml_Element
 {    
     PDATA_ELEMENT           pData;
     PCHILDREN_ARR          pChildrenArr;
     PXML_ELEMENT           pParent;
     PATTR_ARR              pAttributeArr;
     UINT32                     depth;
  };

子配列を作成しているとき:コードは次のとおりです:

PCHILDREN_ARR retArr;
retArr->childrenArray = (PXML_ELEMENT)Calloc(retArr->maxNumOfChildren ,sizeof(XML_ELEMENT)); /*my max is 5 .. */

そして今、私は問題を抱えています:私はこの関数を使いたいです:

XML_STATUS xml_AddChildToEndArray(PXML_ELEMENT pChild , PXML_ELEMENT pParent)
{
     pParent->pChildrenArr->childrenArray + pParent->pChildrenArr->numOfChildren = pChild;
}

そこにエラーが表示されます...なぜそれが間違っているのか、どうすれば修正できますか?

したくない:

'currentCell ->name = pChild-> name'

すべての値をコピーしています...子を指すようにするためだけに

ありがとう!

4

1 に答える 1

0

childrenArray構造内の「配列」に項目を追加しますchildrenArrayか?

まず、新しい配列に十分なスペースが割り当てられていることを確認する必要があります。これは、例えばで行うことができますrealloc

多分このようなもの:

/* Allocate space for one more entry */
pParent->pChildrenArr->childrenArray =
    realloc(pParent->pChildrenArr->childrenArray,
            (pParent->pChildrenArr->numOfChildren + 1) * sizeof(XML_ELEMENT));

/* Copy the entry to the new place */
pParent->pChildrenArr->childrenArray[pParent->pChildrenArr->numOfChildren] = *pChild;

/* One more child now */
pParent->pChildrenArr->numOfChildren++;

編集:最大数のエントリを持つ割り当てられた配列が既にあるようです。再割り当てする必要はありません:

if (pParent->pChildrenArr->numOfChildren < pParent->pChildrenArr->maxNumOfChildren)
{
    pParent->pChildrenArr->childrenArray[pParent->pChildrenArr->numOfChildren] = *pChild;
    pParent->pChildrenArr->numOfChildren++;
}

必要に応じて配列のサイズを増やしたい場合は、次の 2 つの方法を組み合わせる必要があります。

PCHILDREN_ARR pArray = pParent->pChildrenArr;

if (pArray->numOfChildren >= pArray->maxNumOfChildren)
{
    /* We need to reallocate */
    pArray->maxNumOfChildren += 5;

    pArray->childrenArray = realloc(pArray->childrenArray,
                                    pArray->maxNumOfChildren * sizeof(XML_ELEMENT));
}

pArray->childrenArray[pArray->numOfChildren++] = *pChild;
于 2012-09-04T08:15:12.427 に答える