strcat和malloc

时间:2012-04-03 19:53:32

标签: c string malloc

目前,我需要将strcat()2个字符串放在一起。问题是,我必须这样做3次。 (共6个连接)。 程序是这样,使用循环重复3次:

  1. Malloc a string
  2. 使用for循环,调用strcat 2次
  3. 释放字符串
  4. 问题是,即使在我释放字符串和重新malloc后,strcat似乎继续连接前一个字符串。

    例如:

    AA BB CC DD EE FF的预期输出

    • strcat string 1:AABB
    • strcat string 2:CCDD
    • strcat string 3:EEFF

    实际输出:

    • strcat string 1:AABB
    • strcat string 2:AABBCCDD
    • strcat string 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;
        }
    }
    

2 个答案:

答案 0 :(得分:1)

ptr=malloc(…)之后strcat()之前,使用*ptr = '\0';初始化空间。 malloc()返回的内存通常不会归零。

答案 1 :(得分:0)

使用printf语句检查循环结构,当你认为自己时,你很可能没有释放你的想法。将根据代码编辑答案..

你只是重新malloc,这只是说嘿我要写在这里..这就是你已经说过的。尝试释放/重新初始化变量