0

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

  1. malloc 一个字符串
  2. 使用for循环,调用strcat 2次
  3. 释放字符串

问题是,即使在我释放字符串并重新 malloc 之后,strcat 似乎仍在继续连接前一个字符串。

例如:

AA BB CC DD EE FF 的预期输出

  • 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 语句检查你的循环结构,很可能你没有释放你认为的东西。将根据代码编辑答案..

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

于 2012-04-03T19:56:56.990 回答