0

現在、2つの文字列を一緒にstrcat()する必要があります。キャッチは私がこれを3回しなければならないということです。(合計6つの連結)。手順はこれで、ループを使用して3回繰り返されます。

  1. ストリングをMallocする
  2. forループを使用して、strcatを2回呼び出します
  3. 文字列を解放します

問題は、文字列を解放して再マロックした後でも、strcatが前の文字列を連結し続けているように見えることです。

例えば:

AA BB CC DDEEFFからの期待される出力

  • strcat文字列1:AABB
  • strcat文字列2:CCDD
  • strcat文字列3:EEFF

実際の出力:

  • strcat文字列1:AABB
  • strcat文字列2:AABBCCDD
  • strcat文字列3:AABBCCDDEEFF

なぜそれがこれをしているのか誰かが知っていますか?

void sendInitialHand(card * deck) {

    char * stringToSend;
    playerNode * curNode;
    curNode = housePlayers.head;

    for (int i=0; i<housePlayers.playerCount; i++) {

        stringToSend = malloc(sizeof(char)*6);

        for (int j=0; j<52; j++) {
            if (deck[j].inPlay == curNode->playerFD) {
                strcat(stringToSend, deck[j].identifier);
            }
        }

        for (int j=0; j<52; j++) {
            if (deck[j].inPlay == 10) {
                strcat(stringToSend, deck[j].identifier);
            }
        }    

        printf("[NETWORK] Send %d the following: %s\n", curNode->playerFD, stringToSend);
        //send(curNode->playerFD, stringToSend, 6, 0);
        free(stringToSend);
        curNode = curNode->next;
    }
}
4

2 に答える 2

1

ptr=malloc(…)、前strcat()に、スペースを。で初期化し*ptr = '\0';ます。によって返されるメモリmalloc()は通常ゼロ化されません。

于 2012-04-03T19:58:31.857 に答える
0

printfステートメントを使用してループ構造を調べてください。自分が思っているときに、自分が思っていることを解放していない可能性があります。コードに基づいて回答を編集します。

あなたは再マロックするだけです、それはちょうど私がここに書くつもりだと言っています..それはあなたがすでに言ったことです。変数を解放/再初期化してみてください

于 2012-04-03T19:56:56.990 に答える